Series 与Series下的单独列表应用

74 阅读1分钟

问题:为什么data["unique_discountePrice"] = data["discountePrice"].apply(lambda x: list(set(x))) 可行,而data["price_statues"]=list(set(data["price_statues"]))报错呢? 问题背景: 我得到了这么一个DataFrame

1714123516774.png

我想实现这个结果

1714123561685.png

一开始我用

data["price_statues"]=list(set(data["price_statues"]))

代码报错; 更改成:

data["unique_discountePrice"] = data["discountePrice"].apply(lambda x: list(set(x)))

实现了我想要的。

这两个操作的区别在于它们应用 apply() 的对象不同。

  1. data["discountePrice"].apply(lambda x: list(set(x))):

    • 这里 apply() 应用于 DataFrame 的一列 "discountePrice" 上。
    • lambda x: list(set(x)) 函数应用于该列中的每个单独的列表。
    • 因为每个单独的列表都是可迭代的,并且不涉及整个 DataFrame 的类型问题,所以在应用 set()list() 函数时不会出现问题。
  2. list(set(data["price_statues"])):

    • 这里的 set()list() 函数直接应用于整个 Series data["price_statues"] 上。
    • 由于 data["price_statues"] 是整个 Series,而不是单个列表,set() 函数试图将整个 Series 视为一个不可迭代的对象,从而导致错误。

总的来说,第一种方法中的 apply() 应用于每个单独的列表,因此可以正确地应用 set()list() 函数。而第二种方法中的 set()list() 直接应用于整个 Series,因此导致了错误。