使用Python将字符串列合并到一组列表中

使用Python将字符串列合并到一组列表中,python,pandas,numpy,Python,Pandas,Numpy,我有这样一个熊猫数据框: id fruits 01 Apple, Apricot 02 Apple, Banana, Clementine, Pear 03 Orange, Pineapple, Pear 如何通过删除重复的水果来获得这样的水果列表 ['Apple','Apricot','Banana','Clementine','Orange','Pear','Pineapple'] 您可以展平由创建的列表s,转换为设置s以获得唯一和最后的列表s: a =

我有这样一个熊猫数据框:

id     fruits
01     Apple, Apricot
02     Apple, Banana, Clementine, Pear
03     Orange, Pineapple, Pear
如何通过删除重复的水果来获得这样的水果列表

['Apple','Apricot','Banana','Clementine','Orange','Pear','Pineapple']

您可以展平由创建的
列表
s,转换为
设置
s以获得唯一和最后的
列表
s:

a = list(set([item for sublist in df['fruits'].str.split(', ') for item in sublist]))
print (a)
['Pineapple', 'Clementine', 'Apple', 'Banana', 'Apricot', 'Orange', 'Pear']
或:

感谢@kabanus提供的备选方案:

a = list(set(sum(df['fruits'].str.split(', '),[])))

使用
str.extractall
删除重复项

df.fruits.str.extractall(r'(\w+)').drop_duplicates()[0].tolist()
产出:

['Apple', 'Apricot', 'Banana', 'Clementine', 'Pear', 'Orange', 'Pineapple']
试试这个

set(', '.join(df['fruits']).split(', '))
输出:

set(['Apple', 'Apricot', 'Pear', 'Pineapple', 'Orange', 'Banana', 'Clementine'])

我会使用
set(sum(df['fruits'].str.split(','),[])
作为第一个选项,或者更好的是
set(df['fruits'].str.split(',')).sum())
。谢谢您的帮助。我在使用您的第一个解决方案时出错。TypeError:“float”对象不可编辑。第二个很好用。@ahbon-super,很高兴能帮上忙@kabanus,我测试了提供的不同解决方案的性能,您的(kabanus:1)是最快、最简洁的。(卡巴努斯:2)和(耶斯雷尔:1)也有类似的时间安排。很不错的!有人告诉我,普通python中的字符串操作通常比pandas中的要快,这一点在这里似乎是正确的。@ahbon,不确定为什么我的答案被接受,因为这一个暗示了一种优越的技术(基于简洁性和性能),谢谢,但我得到了一个错误:TypeError:sequence item 8:expected str instance,float find。你知道为什么吗?我想这是因为混合数据类型。尝试隐藏df['fruits']=df['fruits'].astype(str)@MohamedThasinah-更好的是
set(',')。join(df['fruits').split(','))
@jezrael-你的答案更新正确了,谢谢你的评论所有的单词标签都是一个?对不起,我不明白你的问题。我想如果同一个fruits有两个单词,比如
蚕豆
:)
set(['Apple', 'Apricot', 'Pear', 'Pineapple', 'Orange', 'Banana', 'Clementine'])