【问题标题】:Pandas unhashable type:list while I'm using a string [duplicate]Pandas 不可散列的类型:我使用字符串时的列表 [重复]
【发布时间】:2021-11-10 03:59:54
【问题描述】:
items = ['1', '2', '3']
for item in items:
   df_list[item]= df.loc[file_df['Item'] == item]

这很好用。但是,如果我的项目列表是其他内容,例如:

items = [{'code': '1', 'other_needed_value': 1}, {'code': '2', 'other_needed_value': 2}, {'code': '3', 'other_needed_value': 3}]
for item in items:
    code = item['code']
    df_list[item]= df.loc[file_df['Item'] == code]

显然我正在将 file_df['Item'] 与一个字符串进行比较,但是我从 pandas 得到了这个错误

unhashable type: 'dict'

我应该如何解决这个问题?提前致谢。

【问题讨论】:

  • 你的字典列表是不是叫item 或者这是一个错字?此外,最好放置完整的 Traceback 错误,这样我们就可以看到是哪一行导致了问题
  • 抱歉,更改变量名时打错了。将编辑
  • 问题不在于比较。问题是尝试使用item 作为字典键,而item 本身就是dict。如果您打算使用 code 作为 dict 键,那么这只是一个错字。否则请参考链接的副本。
  • 以后,您也应该先尝试debug您的代码,然后再询问。这首先要尝试理解错误消息;特别是那行代码的哪一部分导致错误。您可能会发现将这条线分成更小的部分很有帮助。例如,在这种情况下,您可能先将df.loc[file_df['Item'] == code] 分配给一个临时变量,然后再将其分配给df_list[item]。您会立即看到问题出在第二部分。

标签: python pandas


【解决方案1】:

df_list[item] 应该是 df_list[code]。这里发生的情况是列表df_list 正在使用item 进行索引,在上面的第二个代码示例中,它实际上是一个字典,因此出现了错误。 OP想要的是获取字典的“代码”值。想要的代码也可以写成:

for item in items:
    df_list[item['code']]= df.loc[file_df['Item'] == item['code']]

【讨论】:

  • 不用担心。将来,如果您遇到此类错误并且不确定是哪个变量导致了问题,您可以随时尝试调试,方法是在引发错误的代码中设置断点,然后检查哪个变量是字典。 Here's a tutorial on how to do that in VSCode
【解决方案2】:

我无法运行您的代码, 但我看到你使用

for item in items:
    code = item['code']

物品的类型是什么 好像是字典 因为在下一行你使用 item['code'] ==> 因此是字典 也许您试图分配 df_list[code]?

更多的代码/输出会有所帮助

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2019-03-10
    • 2018-04-23
    • 2019-08-29
    相关资源
    最近更新 更多