从每行数据框中的列中删除不在lis中的字符串

2024-04-26 01:11:34 发布

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

假设我有一个单词列表:

listOfWords = ['Apple','Orange','Banana','Potato']

我的数据框如下所示:

In:

ColumnA:
['Apple','Turnip','Banana','Potato']
['Apple','Orange','Banana','Potato']
['Apple','Orange','Pastry','Potato']
['Melon','Orange','Banana','Potato']
['Apple','Orange','Banana','Sandwich']

我目前正在运行以下代码来检索所需的输出

for index, row in df.iterrows():
    for word in df['Column']:
        if word not in listOfWords:
            word.replace(word,"")



Out:

ColumnA:
    ['Apple','Banana','Potato']
    ['Apple','Orange','Banana','Potato']
    ['Apple','Orange','Potato']
    ['Orange','Banana','Potato']
    ['Apple','Orange','Banana']

我目前正在运行12000条记录和长度为12000的列表。它已经运行了几个小时没有错误,但是我不确定这是否是最有效的方法


Tags: 数据inappledf列表for单词word
1条回答
网友
1楼 · 发布于 2024-04-26 01:11:34

apply或嵌套的list comprehension中使用列表理解:

df['ColumnA']= df['ColumnA'].apply(lambda x: [y for y in x if y in listOfWords]) 
#another solution
#df['ColumnA'] = [[y for y in x if y in listOfWords] for x in df['ColumnA']]
print (df)
                           ColumnA
0          [Apple, Banana, Potato]
1  [Apple, Orange, Banana, Potato]
2          [Apple, Orange, Potato]
3         [Orange, Banana, Potato]
4          [Apple, Orange, Banana]

或者,如果顺序不重要,则使用带交叉点的sets:

s = set(listOfWords)
df['ColumnA']= df['ColumnA'].apply(lambda x: list(set(x) & s))
print (df)
                           ColumnA
0          [Banana, Potato, Apple]
1  [Banana, Potato, Orange, Apple]
2          [Potato, Orange, Apple]
3         [Banana, Potato, Orange]
4          [Banana, Orange, Apple]

相关问题 更多 >

    热门问题