pandas: TypeError: unhashable тип: 'список' - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть df:

                     name                   kind               phone

0                 [John Muller]             person             [8866155845]
1                 [Innovation Division]     company            NaN
2                 [Carol Sway]              person             [8866155845]

и я хочу найти дубликаты номера телефона и объединить строки. Но объекты в df перечислены, поэтому используйте:

df.duplicated('phone')

сгенерирует ошибку TypeError: unhashable тип: 'list'

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Преобразуйте вашу серию одноэлементных элементов списка в серию скаляров.Поскольку иногда у вас есть NaN, вы можете использовать пользовательскую функцию * 1002. *

0 голосов
/ 25 апреля 2018

Вы также можете использовать функцию applymap, которая очень удобна для решения этой проблемы:

# get duplicated row
df2 = df[df.applymap(lambda x: x[0] if isinstance(x, list) else x).duplicated('phone')]

print(df2)

           name    kind         phone
2  [Carol Sway]  person  [8866155845]
0 голосов
/ 25 апреля 2018

Мы можем сделать вывод из этой ошибки, что df.duplicated использует set для определения дубликатов, поэтому все объекты в серии должны быть хэшируемыми. Списки не являются хэшируемыми.

Изучая ваш фрейм данных, каждый name и phone представляет собой список с одной строкой.

Почему? если нет достаточной причины (т. е. в каждой строке никогда не будет больше одного имени и телефона), преобразуйте их в строки или создайте их в виде строк с самого начала.

...