Python notes/Python Errors

Python Errors) UserWarning: Boolean Series key will be reindexed to match DataFrame index 해결!

성실한 나무 2022. 6. 13. 12:17

이원분산분석을 위해 먼저 데이터의 정규성과 등분산성을 검정하고 있던 차에 아래와 같이 UserWarning이 떴다.

 

UserWarning: Boolean Series key will be reindexed to match DataFrame index

UserWarning: Boolean Series key will be reindexed to match DataFrame index

불린의 시리즈 키가 데이터 프레임의 인덱스와 매치되도록 리인덱스 한다는 내용이다.

사실 Warning 메시지는 그냥 무시해도 상관없긴 하지만, 기왕이면 깔끔한 output을 얻기 위해서 왜 저렇게 되었을까 살펴보았다.

알고보니, 데이터프레임에서 "일정 조건에 따라" 값을 조회할 때 그 조건을 잘못 넣으면 저런 Warning이 나오는 것이었다.

 

일단, 첫번째 케이스의 경우, df2[df['자동차'] == 'S1-1']['기록']으로 되어 있는데 원래 의도했던 바는 df2라는 데이터프레임에서 자동차라는 열의 값이 S1-1인 데이터의 "기록"값만 sorting을 하겠다는 것이다. 그런데 보면 df2[조건]에서 조건의 내용이 잘못 들어가있다 ^^; df2['자동차']=='S1-1'] 이라고 했어야 하는 것이다. 잘못 적었다. 게다가 잘못적은 코드를 세번 복붙해서 실행을 시켰더니 UserWarning도 세 줄이나 떴다.

 

두번째 케이스의 경우, df[조건]으로 데이터를 조회할 때 두개의 조건을 넣는데 괄호를 치지 않아서 UserWarning이 나온 경우이다. 사실 객체에는 적절한 데이터 값들이 담기기는 했지만 사용자가 알아둘 필요가 있다고 판단해서 UserWarning을 띄운 것 같다. 데이터프레임 조건을 작성할 때 &, and, or 등을 사용할 때 각 조건들을 괄호로 묶어서 좀 더 확실하게 조건을 작성하는 것이 필요할 것으로 보인다.

 

위의 두 경우 문제를 해결하면 아래와 같이 깨끗한 아웃풋을 얻을 수 있다.

두번째 경우는 이번 warning이 큰 문제가 되지 않았기에 filterwarnings('ignore')해서 무시를 해도 됐겠지만, 첫번째 경우는 warning을 보지 않았다면 아예 결과값이 바뀔 수 있는 아찔한 실수였다.

이래서 비록 Error가 아닌 warning이라고 하더라도 코드를 다시 한번 살펴보는 습관이 필요한 것 같다. 

UserWarning: Boolean Series key will be reindexed to match DataFrame index 해결