【问题标题】:How to fix TypeError: 'Series' objects are mutable, thus they cannot be hashed如何修复 TypeError:“系列”对象是可变的,因此它们不能被散列
【发布时间】:2019-12-21 21:08:31
【问题描述】:

我有以下熊猫数据框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: 'Series' 对象是可变的,因此它们不能被散列

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这里使用参数engine='python',因为传递的pandas函数isna不能与numexpr引擎一起工作。 pandas.eval 的文档中的更多信息:

    engine : 字符串或无,默认‘numexpr’, {‘python’, ‘numexpr’}

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

    :尝试使用 numexpr,回退到 python

    'numexpr':这个默认引擎使用 numexpr 用于在大帧的复杂表达式中大幅加速。

    'python':执行操作就像您在顶部进行了 eval'd 级别的蟒蛇。这个引擎通常没那么有用。

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


    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
    

    【讨论】:

    • 能否请您解释一下为什么会出现此错误?实际上,我只在我的笔记本电脑中得到它。当我在云端运行代码时,这条线工作正常......
    • @Fluxy - 不确定是否有 pandas 版本的内容,在 pandas 0.25.1 中测试并引发与问题相同的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2021-01-17
    相关资源
    最近更新 更多