TypeError:无法散列的类型:具有列表理解的“ dict”

时间:2018-10-21 01:08:32

标签: python pandas

谁能告诉我下面的代码为什么会产生此错误?

In [130]: [(str(i), len(list(set(pd.unique(myData[i]))))) for i in list(myData.columns)]
Traceback (most recent call last):

  File "<ipython-input-130-6f3c233b81d6>", line 1, in <module>
    [(str(i), len(list(set(pd.unique(myData[i]))))) for i in list(myData.columns)]

  File "C:\Users\mycomputer\anaconda\lib\site-packages\pandas\core\algorithms.py", line 368, in unique
    uniques = table.unique(values)

  File "pandas\_libs\hashtable_class_helper.pxi", line 1567, in pandas._libs.hashtable.PyObjectHashTable.unique

TypeError: unhashable type: 'dict'

2 个答案:

答案 0 :(得分:1)

我转载了您的问题,您遇到此问题的原因是因为您在熊猫数据框单元格中输入了dict

您可以在数据框中输入dict类型,但是pd.unique()会失败,因为它会尝试对元素进行哈希处理以确定哪个元素是唯一的,而dict是不可哈希的。

此外,列表理解中的set并不是必需的,因为pd.unique已经解决了这个问题。

我通过让熊猫读取列表列表来重现了相同的问题,堆栈跟踪完全相同,其中一些元素是字典。读取成功,但随后失败。一种解决方案可能是在只有少量数据的情况下打印字典,或者在将数据制成数据框之前对其进行预处理。

答案 1 :(得分:1)

正如在某些答案中提到的那样,您的数据框可能包含一个字典。您可以在使用唯一性之前将值转换为字符串类型,如下所示:

[(str(i), len(my_data[i].astype(str).unique())) for i in list(my_data.columns)]