【问题标题】:Removing duplicates from list - "TypeError: 'Series' objects are mutable, thus they cannot be hashed."从列表中删除重复项 - “TypeError:'Series' 对象是可变的,因此它们不能被散列。”
【发布时间】:2019-07-12 09:28:56
【问题描述】:

我一直收到“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)

在某些情况下,我的代码应该采用每个列表中的所有名称,并在最后打印单个列表之前删除重复项。

【问题讨论】:

  • 元组本身是不可变的,但如果它们包含可变对象,那么您将遇到同样的问题。
  • 你能用实际的堆栈跟踪(错误)和一个 sn-p 或 TEST.csv 的例子来充实你的问题吗?
  • Jordan = data-file['Jordan'] 正在创建一个 Series 并且错误表明你不能有一个系列。按照链接将列数据正确分隔到列表中。
  • tuple(invite) 实际上并没有做任何事情,因为你没有将它分配给任何东西。

标签: python immutability mutable


【解决方案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 中提取数据之前创建空列表应该是不必要的。

【讨论】:

    【解决方案2】:

    可能有许多不同的方法可以做到这一点,所以这里有一个选项,它可以显着减少您需要的代码量。

    # Assuming 'invites' is a list of strings that needs to be reduced to uniques
    # This method will maintain the order of your list, but remove duplicates
    uniques = list({key:'' for key in invites}.keys())
    
    # Using set() will remove duplicates but will not preserve the order of the entries
    uniques = list(set(invites))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多