从不在列表中的每行数据框中的列中删除字符串
Posted
技术标签:
【中文标题】从不在列表中的每行数据框中的列中删除字符串【英文标题】:Remove Strings from Column in data frame per row that aren't in a list 【发布时间】:2019-08-01 03:38:00 【问题描述】:假设我有一个单词列表:
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']
我目前正在对 12,000 条记录和长度为 12,000 的列表运行此操作。它已经运行了几个小时没有错误,但是我不确定这是否是最有效的方法。
【问题讨论】:
【参考方案1】:在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]
或者如果订单不重要,请使用 set
s 和交集:
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]
【讨论】:
以上是关于从不在列表中的每行数据框中的列中删除字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何从python中的pandas数据框中的列中提取关键字(字符串)