ㅅㅇ

[pandas/python] query 사용 시 _ TypeError: unhashable type: 'Series' 본문

SW_STUDY/TroubleShooting

[pandas/python] query 사용 시 _ TypeError: unhashable type: 'Series'

SO__OS 2022. 6. 10. 00:26

판다스 데이터 조회에서

query() 를 이용한 boolean indexing 를 할 수 있다. 

 

하지만, 이때 series의 메소드를 이용할 경우 해당 에러가 발생할 수 있다.

 

* 흔히, query() 에서 사용하는 series의 메소드는 다음과 같다.

 

  문자열 부분검색  
    - 컬럼명.str.contains(문자열) : 문자열을 포함하고 있는 
    - 컬럼명.str.startswith(문자열) : 문자열로 시작하는
    - 컬럼명.str.endswith(문자열)  : 문자열로 끝나는

 

  결측치 비교 - Series 의 메소드 사용
    - 컬럼.isna(), isnull()
    - 컬럼.notna(), notnull()   

 

 

아래의 코드를 실행하고자 하였다.

# 결측치 조회- Series의 메소드 사용
df.query("tall.isnull()")

# 특정 문자열을 포함하는
df.query('name.str.contains("영")')

 

그러나, 다음과 같은 오류가 발생하였다.

TypeError: unhashable type: 'Series'

 

오류 원인

파이썬 넘파이 버전 문제인 것 같기도 하지만, 일단 다시 설치를 하기가 힘들어, 다른원인과 방법에 대해 찾아보았다.

 

구글링 결과 query 함수에 들어가는 쿼리문을 해석하는 엔진 기본값으로 'numexpr' 로 설정되어 있고

이 엔진이 isnull 함수를 해석하지 못하기 때문이라고 한다.

 

해결 방안

 => 엔진을 바꿔주면 된다. 아래와 같이 engine 인자에 'python' 을 넣어주면 된다.

 

# 결측치 조회- Series의 메소드 사용
df.query("tall.isnull()", engine='python')

# 특정 문자열을 포함하는
df.query('name.str.contains("영")', engine = 'python')

 

 

'SW_STUDY > TroubleShooting' 카테고리의 다른 글

[python] RuntimeError: deque mutated during iteration.  (0) 2022.06.10