본문 바로가기

Data handling

[pandas] ValueError: Cannot mask with non-boolean array containing NA / NaN values 해결법

728x90

1. 문제가 발생하는 원인

조건문으로 mask(True 혹은 False로 이루어진 series) 를 만들고,

df[ mask ] 로  df중 mask에 해당하는 row들만 선택할 수 있다.

https://study-grow.tistory.com/entry/pandas-%ED%8A%B9%EC%A0%95-%EC%B9%BC%EB%9F%BC%EC%9D%98-%ED%96%89%EC%9D%B4-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%BC-%EA%B2%BD%EC%9A%B0-%ED%8A%B9%EC%A0%95-%EC%A1%B0%EA%B1%B4%EC%9D%84-%EB%A7%8C%EC%A1%B1%ED%95%98%EB%8A%94-%EC%B9%BC%EB%9F%BC%EB%A7%8C-select-%ED%95%98%EA%B8%B0

 

[pandas] 특정 칼럼이 문자열로 이루어졌을 경우, 특정 조건을 만족하는 row만 select 하기

sinhan6_ = sinhan6[sinhan6['시군구'].str.contains('종로구|중구|용산구|성동구|광진구|동대문구|중랑구|성북구|강북구|도봉구|노원구|은평구|서대문구|마포구|양천구|강서구|구로구|금천구|영등포구|관악

study-grow.tistory.com

이때 mask에 False, True 가 아닌 Nan값이 들어가서 발생하는 문제다.

2. 해결 방법

 

sinhan6_2 = sinhan6_[~sinhan6_['행정동'].str.contains('중앙동|동광동|대청동|보수동|부평동|광복동|남포동|영주1동|영주2동|대저1동|대저2동|강동동|명지1동|명지2동|가락동|녹산동|가덕도동', na=False)].reset_index(drop=True)

str.contains 함수내에 인자로 na=False를 추가해준다.

참고

https://ddolcat.tistory.com/845

 

[Python]파이썬 데이터프레임(DataFrame) 문자열 포함 여부 확인시 발생하는 ValueError: Cannot mask with non-

엑셀파일(xlsx)을 읽어서 판다스(pandas) 데이터프레임(DataFrame) 타입으로 데이터를 읽어 들였다. 그리고 내가 찾고자하는 문자열을 포함하는 행을 찾기 위해 str.contains()메소드를 사용하였다. 이 함

ddolcat.tistory.com