在数据帧中,每一行都有大量重复值。下面是一些示例,我查看了其他堆栈溢出问题,但是我只能找到列表的答案,而不是数据帧问题重复的答案。当我在列表中传递值时,我可以删除重复的值,但是,当我像数据框一样传递它时,它给出了错误:TypeError: unhashable type: 'list'
我在这里做什么错了?
import pandas as pd
d = {'col1': ['apples are delicious,apples are delicious,apples', 'apples'], 'col2': ['mangoes','oranges']}
df = pd.DataFrame(data=d)
df['col1'] = set(df['col1'].str.split(",")) #error tried list(set()) as well.
df['col2'] = df['col2'].str.split(",") #converting to list
print(df)
最终输出应删除像这样的重复对象:
col1 co2
['apples are delicious','apples'] ['mangoes']
['apples'] ['oranges']
答案 0 :(得分:2)
您在整个系列中使用set
,而您需要将set
应用于系列中的每个元素。为此,您可以使用pd.Series.map
:
df['col1'] = df['col1'].str.split(',').map(set)
print(df)
col1 col2
0 {apples are delicious, apples} [mangoes]
1 {apples} [oranges]
您的错误源于您无法拥有set
个列表的事实,因为列表不可散列。
如果您确实需要一系列列表,则可以再次使用相同的方法,即df['col1'].str.split(',').map(set).map(list)
。但是请注意,您不应该假设任何排序,因为set
是无序集合。