프로젝트 진행 중 가격에 ' ~ '가 들어간 데이터가 있어서 drop 해 주기 위해
df.str.contains를 사용했는데 에러가 발생했다.
df2.loc[df2['price'].str.contains('~'), 'price'] = 0
에러 내용은 다음과 같다.
ValueError: Cannot mask with non-boolean array containing NA / NaN values
문자열을 찾을 때 컬럼에 NaN값이 존재하면 NaN을 반환하기 때문에 에러가 발생하는 것이다.
해결을 위해서는 NaN 값이 존재하는 경우에 대한 예외처리가 필요하다.
str.contains() 함수의 파라미터 na를 사용하여 NaN을 만났을 경우 기본값을 설정해 줄 수 있다.
df2.loc[df2['price'].str.contains('~', na=True), 'price'] = 0
포함된 값만 찾기 위해서는 일반적으로 na=False 로 치환하지만
내 목적은 이상값을 0으로 바꾼 후 drop 하는 것이므로, True로 치환해줬다.