TypeError: unhashable тип: 'dict' с пониманием списка - PullRequest
0 голосов
/ 21 октября 2018

Может кто-нибудь сказать мне, почему следующий код вызывает эту ошибку?

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 голосов
/ 21 октября 2018

Как уже упоминалось в некоторых ответах, ваш фрейм данных, вероятно, содержит dict.Вы можете преобразовать значения в строковый тип перед использованием уникального, как показано ниже:

[(str(i), len(my_data[i].astype(str).unique())) for i in list(my_data.columns)]
0 голосов
/ 21 октября 2018

Я воспроизвел вашу проблему, причина, по которой вы сталкиваетесь с этим, заключается в том, что в ячейках данных pandas указан тип dict.

Вы можете поместить тип dict в свой кадр данных, но pd.unique() терпит неудачу из-за того, что пытается хэшировать элементы, чтобы определить, какой из них является уникальным, и dict не подлежит обработке.

Кроме того, set в вашем понимании списка не является необходимым, поскольку pd.unique уже заботитсяоб этом.

Я воспроизвел ту же проблему с точно такой же трассировкой стека, попросив панд прочитать список списка, некоторые элементы которого были словарями.Чтение прошло успешно, но затем не удалось.Решение может заключаться в том, чтобы распечатать диктовку, если их всего несколько, или предварительно обработать данные перед тем, как сделать их фреймом данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...