我已经收到“ 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)
在某些情况下,我的代码应该采用每个列表中的所有名称,并删除重复项,然后在末尾打印单个列表。
答案 0 :(得分:1)
正如Makoto所建议的那样,问题不是invite
的类型,而是invite
所要处理的类型。看来您正在尝试解压缩pandas.Series
的每个实例以填充列表,然后再使用dict.fromkeys()
进行重复数据删除。为此,您应该使用list.extend()
而不是list.append()
。前者扩展了一个列表,其中所有参数都包含在其参数内,而后者则将单个新元素添加到列表(Difference between append vs. extend list methods in Python)中。例如:
invite = []
invite.extend(Carter)
invite.extend(Jordan)
您可能还需要手动将pandas.Series
转换为列表,如下所示:
invite = []
invite.extend(Carter.to_list())
invite.extend(Jordan.to_list())
请注意,在从CSV提取数据之前无需创建空列表。
答案 1 :(得分:0)
执行此操作的方法可能有多种,因此这是一个选项,可减少您所需的大量代码。
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())
我不喜欢用空白值创建字典,但这只是获得要拍摄的结果的一种方法。