如何修复TypeError:“系列”对象是可变的,因此不能进行哈希处理

时间:2019-12-21 12:46:57

标签: python pandas

我有以下熊猫数据框df

Id    Version  Time
110   9016     NaN
110   9016     NaN
110   9016     NaN
110   9016     2019-10-18 14:19:05.180

当我运行此查询时:

df.query('Time.isna()').head()

..我收到此错误:

  

TypeError:“系列”对象是可变的,因此不能进行散列处理

为什么会发生以及如何解决?可能与pandas和Python的版本有关吗?我使用Pandas'0.25.3'和Python 3。

1 个答案:

答案 0 :(得分:2)

在此使用参数engine='python',因为传递的熊猫函数isna无法与numexpr引擎一起使用。文档中有关pandas.eval的更多信息:

  

引擎:字符串或无,默认为“ numexpr”,{“ python”,“ numexpr”}

     

用于评估表达式的引擎。支持的引擎是

     

:尝试使用numexpr,退回到python

     

'numexpr':此默认引擎使用评估熊猫对象               numexpr用于大框架复杂表达式中的大幅度加速。

     

'python':就像执行顶部操作一样执行操作               级别的python。该引擎通常没有那么有用。

     

将来可能会提供更多后端。


df1 = df.query('Time.isna()', engine='python').head()
print (df1)
    Id  Version Time
0  110     9016  NaN
1  110     9016  NaN
2  110     9016  NaN

或欺骗NaN != NaN

df1 = df.query('Time != Time').head()
print (df1)
    Id  Version Time
0  110     9016  NaN
1  110     9016  NaN
2  110     9016  NaN