问题:为什么data["unique_discountePrice"] = data["discountePrice"].apply(lambda x: list(set(x))) 可行,而data["price_statues"]=list(set(data["price_statues"]))报错呢? 问题背景: 我得到了这么一个DataFrame
我想实现这个结果
一开始我用
data["price_statues"]=list(set(data["price_statues"]))
代码报错; 更改成:
data["unique_discountePrice"] = data["discountePrice"].apply(lambda x: list(set(x)))
实现了我想要的。
这两个操作的区别在于它们应用 apply() 的对象不同。
-
data["discountePrice"].apply(lambda x: list(set(x))):- 这里
apply()应用于 DataFrame 的一列 "discountePrice" 上。 lambda x: list(set(x))函数应用于该列中的每个单独的列表。- 因为每个单独的列表都是可迭代的,并且不涉及整个 DataFrame 的类型问题,所以在应用
set()和list()函数时不会出现问题。
- 这里
-
list(set(data["price_statues"])):- 这里的
set()和list()函数直接应用于整个 Seriesdata["price_statues"]上。 - 由于
data["price_statues"]是整个 Series,而不是单个列表,set()函数试图将整个 Series 视为一个不可迭代的对象,从而导致错误。
- 这里的
总的来说,第一种方法中的 apply() 应用于每个单独的列表,因此可以正确地应用 set() 和 list() 函数。而第二种方法中的 set() 和 list() 直接应用于整个 Series,因此导致了错误。