【问题标题】:TypeError: unhashable type: 'slice' pandas DataFrame columnTypeError: unhashable type: 'slice' pandas DataFrame 列
【发布时间】:2019-04-17 15:05:58
【问题描述】:

这可能很简单,但我找不到解释,而且它一直发生在我身上。

我正在尝试从 Rate1E 列中选择超过 3.5 的值,并查看 pandas DataFrame energy 中的其余行,以获取符合上述条件的选定行。之前有人给过我答案,直接改成文字如下:

energy = energy.loc[energy[:, 'Rate1E'] >= 3.5]
print(energy.loc[:, 'Rate1E'])

但是我又一次发现自己遇到了错误:

TypeError: unhashable type: 'slice'

在线解决方案建议.loc 是答案。有人知道如何修复代码或更好地向我解释为什么我似乎总是得到那个错误。

谢谢。

【问题讨论】:

  • 一般来说,df[x, y, z]x, y, z 视为一个元组,当列索引为MultiIndex 时表示一个标签。在这种情况下,它尝试使用:,即slice(None) 作为标签。

标签: python pandas dataframe indexing series


【解决方案1】:

您的语法不正确。你需要:

energy = energy.loc[energy['Rate1E'] >= 3.5]

或者:

energy = energy.loc[energy.loc[:, 'Rate1E'] >= 3.5]

关键是energy.loc[:, 'Rate1E']energy['Rate1E']是系列,后者是访问前者的便捷方式。

不幸的是,Pandas 文档没有为pd.DataFrame.__getitem__ 指定精确允许的参数,df[] 是语法糖。最流行的用途是:

  • 提供一个字符串来给出一个系列。
  • 提供一个列表来给出一个数据框。
  • 提供布尔系列来过滤您的数据框。

【讨论】:

    【解决方案2】:

    您拨打energy[:, 'Rate1E'] 所做的事情与您的预期不同。您正在寻找.loc[] 电话。

    energy = energy.loc[energy['Rate1E'] >= 3.5]
    print(energy['Rate1E'])
    

    【讨论】:

    • 解决方案不正确,因为.loc 在初始方括号后需要调用。
    • 解决方法见上
    • 我正在尝试查看energy 中基于unitRate1Elec 中大于或等于3.5 的值的所有其他列。
    • @geds133 是的,这就是建议的答案。 @jpp 很好地总结了为什么您可以在第一个 energy.loc[] 调用中同时使用 energy.loc[]energy[]。无论哪种方式看起来你的问题都解决了:)
    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多