TypeError:不可散列类型:'sl​​ice'pandas DataFrame列

时间:2018-11-14 15:36:39

标签: python pandas dataframe indexing series

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

我正在尝试从Rate1E列中选择3.5以上的值,并查看pandas DataFrame energy中其余符合上述条件的行。我之前曾有人给我一个答案,只是更改为以下文本:

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

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

TypeError: unhashable type: 'slice'

在线解决方案表明.loc是答案。有人会知道如何修复代码,或者更好地向我解释为什么我总是会出现该错误。

谢谢。

2 个答案:

答案 0 :(得分:3)

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

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[]是语法糖。最受欢迎的用途是:

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

答案 1 :(得分:0)

您对energy[:, 'Rate1E']的呼叫正在做与您期望的不同的事情。您正在寻找.loc[]通话。

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