Удаление дубликатов из списка: «TypeError: объекты 'Series' являются изменяемыми, поэтому их нельзя хэшировать». - PullRequest
0 голосов
/ 19 февраля 2019

Я получаю сообщение "TypeError: объекты 'Series' являются изменяемыми, поэтому их нельзя хэшировать".И хотя я понимаю, что это значит, я не могу найти решение.Я попытался преобразовать серию в кортеж (как показано ниже), так как кортежи неизменны.Я получаю то же сообщение об ошибке.Любая идея, как я могу решить эту проблему?

import pandas as pd

data_file = pd.read_csv("file:///C:/Users/carte/OneDrive/Desktop/TEST.csv")

Jordan = []
Carter = []
Reece = []
Liam = []
Bryce = []
David = []

Jordan = data_file['Jordan']
Carter = data_file['Carter']
Reece = data_file['Reece']
Liam = data_file['Liam']
Bryce = data_file['Bryce']
David = data_file['David']

invite = []
invite.append(Carter)
invite.append(Jordan)
invite.append(Reece)
invite.append(David)
invite.append(Liam)
invite.append(Bryce)

tuple(invite)

invite = list(dict.fromkeys(invite))
print(invite)

Для некоторого контекста мой код должен взять все имена в каждом списке и удалить дубликаты перед печатью одного списка в конце.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вероятно, есть несколько разных способов сделать это, поэтому вот один из вариантов, и это значительно сокращает объем кода, который вам нужен.

data_file = pd.read_csv("file:///C:/Users/carte/OneDrive/Desktop/TEST.csv")
#If your file only has these names for the column headers, then you
#can just iterate through the columns like this:

invites = []

for name in list(data_file.columns):
    invites.extend(data_file[name].tolist())

result = {}

for key in invites:
    result[key] = ""

uniques = list(result.keys())

Мне не нравится создавать словарь с пустымзначения, но это был только один способ получить результат, за который вы стреляете.

0 голосов
/ 19 февраля 2019

Как предполагает Макото, проблема не в типе invite, а в типе того, что входит в invite.Похоже, вы пытаетесь распаковать каждый экземпляр pandas.Series, чтобы заполнить список, прежде чем дедуплицировать с dict.fromkeys().Для этого вы должны использовать list.extend() вместо list.append().Первая расширяет список со всеми элементами внутри своего аргумента, а вторая добавляет в список один новый элемент ( Разница между методами добавления и расширения списка в Python ).Например:

invite = []
invite.extend(Carter)
invite.extend(Jordan)

Вам также может понадобиться вручную преобразовать pandas.Series в списки, что будет выглядеть примерно так:

invite = []
invite.extend(Carter.to_list())
invite.extend(Jordan.to_list())

Обратите внимание, что создание пустых списков перед извлечением данныхиз CSV должно быть ненужным.

...