谁能告诉我下面的代码为什么会产生此错误?
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'
答案 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)]