从列表形式的数据帧列中删除重复项

2024-04-26 13:33:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 数据df列表asarelistcol2col1
1条回答
网友
1楼 · 发布于 2024-04-26 13:33:05

您在整个序列上使用set,而您需要对序列中的每个元素应用set。为此,可以使用^{}

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

相关问题 更多 >