작성
·
278
0
안녕하세요.
데이터 전처리 강의 내용 중 코드를 똑같이 따라쳤는데도 에러가 나는 부분이 있는데요, 구글링을 열심히 해봤는데도 해결하지 못해서 질문 남깁니다.
df_bool = ~df.groupby('hour')['cnt'].apply(is_outliers)
df_out = df[df_bool]
위 코드를 실행하면 Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
에러가 발생합니다.
df_bool.index
위 메서드로 df_bool의 인덱스를 확인해보니 (hour, n) 의 튜플로 된 멀티 인덱스가 나왔습니다.
df의 인덱스는 0, 1, 2, ... , 17413의 숫자로 되어 있어서 조건식으로 넣은 boolean 시리즈(df_bool)의 인덱스와 df의 인덱스가 일치하지 않아서 발생하는 에러로 이해했습니다. 다만 구글링을 아무리 해도 해결방법은 잘 모르겠습니다. 강의 내용을 똑같이 따라 쳤는데 왜 에러가 발생하는 걸까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
에러 메시지에 따르면 df_bool
의 인덱스와 df
의 인덱스가 일치하지 않아 발생하는 문제로 보입니다. groupby
로 그룹핑된 결과의 인덱스가 멀티 인덱스로 반환되는데, 이를 바로 데이터 프레임에 적용할 경우 일치하지 않는 인덱스로 인해 에러가 발생할 수 있습니다.
인덱스를 동기화하여 문제를 해결하기 위해서는 df_bool
의 인덱스를 df
의 인덱스와 일치시켜주는 과정이 필요합니다. groupby
후에 apply
를 사용하는 경우 결과값의 인덱스가 그룹핑된 인덱스로 구성되기 때문에, 결과값을 원본 데이터프레임과 동일한 인덱스로 재정렬하는 작업이 필요합니다.
reset_index
메서드를 사용하여 멀티 인덱스를 해제하고, 원본 데이터프레임과 동일한 인덱스를 갖도록 조정할 수 있습니다. 아래와 같이 시도해보시기 바랍니다.
df_bool = ~df.groupby('hour')['cnt'].apply(is_outliers).reset_index(drop=True)
df_out = df[df_bool]
reset_index(drop=True)
를 사용하여 멀티 인덱스를 제거하고, 원본 데이터프레임인 df
의 인덱스와 일치하도록 조정합니다. drop=True
옵션은 기존 인덱스를 새로운 열에 추가하지 않고 삭제합니다.
위 방법을 시도해도 문제가 해결되지 않거나 다른 문제가 발생한다면 강의 내용을 다시 한 번 확인하시거나, 직접 문의해보시는 것도 좋은 방법입니다. 인프런에는 질문하기 기능이 있어 강의 관련 질의응답을 할 수 있습니다. 문제가 해결되지 않을 경우, 인프런의 문의하기 기능을 활용해보세요.
도움이 되셨길 바랍니다. 프로그래밍 학습에 어려움이 있을 때 언제든 질문해 주세요.