从列表格式的数据框列中删除重复项

时间:2018-08-21 13:35:44

标签: python python-3.x pandas

在数据帧中,每一行都有大量重复值。下面是一些示例,我查看了其他堆栈溢出问题,但是我只能找到列表的答案,而不是数据帧问题重复的答案。当我在列表中传递值时,我可以删除重复的值,但是,当我像数据框一样传递它时,它给出了错误: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']

1 个答案:

答案 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是无序集合。