본문 바로가기
프로그래밍/Python

[오류 해결] Pandas - query 실행 오류 "TypeError: 'Series' objects are mutable, thus they cannot be hashed"

by 부자 꽁냥이 2021. 6. 13.

안녕하세요~ 꽁냥이에요. 데이터를 테이블 형태로 변환하거나 데이터를 전처리할 때, 그리고 데이터를 추출할 때 Pandas를 많이 사용하지요. 꽁냥이는 특히 데이터 추출할 때 query함수를 사용하는데요.

 

간혹 null 값, nan 값을 포함하는 행을 추출하려고 할 때 query 함수가 제대로 작동하지 않는 경우가 발생합니다. 한번 살펴볼까요?

 

import pandas as pd
import numpy as np

data = {
    'A':[1,2,3],
    'B':[3,np.nan, np.nan]
}

df = pd.DataFrame(data)

 

위 데이터프레임에는 nan값이 포함되어 있습니다.

 

 

이제 B 열에서 nan을 포함하는 행을 추출해보겠습니다.

 

df.query('B.isna()')

 

하지만 실행되지 않고 아래와 같은 TypeError가 발생합니다(만약 numexpr 패키지가 설치 안되어 있다면 이오류는 발생하지 않습니다).

 

"TypeError: 'Series' objects are mutable, thus they cannot be hashed"

 

 

이러한 오류가 발생하는 이유는 query 함수에 들어가는 쿼리문을 해석하는 엔진 기본값으로 'numexpr'로 설정되어 있고 'numexpr'이 isnull 함수를 해석하지 못하기 때문입니다. 따라서 엔진을 바꿔주면 이러한 오류는 쉽게 해결 가능합니다. 아래와 같이 engine 인자에 'python'을 넣어주면 됩니다.

 

df.query('B.isnull()', engine='python')

 

위 코드를 실행하면 아래와 같이 정상적으로 데이터가 추출되는 것을 확인할 수 있습니다.


부디 이번 포스팅이 많은 분들에게 도움이 되길 바랍니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 


댓글


맨 위로