我有很多列表,每个列表包含某些单词,即
fruits = ['apple','banana','cherry']
colours = ['red','blue','yellow']
pets = ['dog','cat','fish']
我在Pandas中有一列文字。我想检查我的文本中是否包含每个列表中的任何单词,并在同一数据框中创建新列。列标题基于列表的名称:
我的桌子应该像这样:
我应该如何在Python中执行此操作?
答案 0 :(得分:2)
首先创建带有列名称键的列表字典,然后循环并为每个列表创建模式-用|
连接正则表达式OR
的值,对于更通用的解决方案,使用单词边界,使用什么str.contains
,最后将布尔值掩码转换为整数:
df = pd.DataFrame({'Text':['This is a red apple','there are not dogs here']})
fruits = ['apple','banana','cherry']
colours = ['red','blue','yellow']
pets = ['dog','cat','fish']
d = {'fruits':fruits, 'colours':colours, 'pets':pets}
for k, v in d.items():
pat = r'\b{}\b'.format('|'.join(v))
df[k] = df['Text'].str.contains(pat).astype(int)
print (df)
Text fruits colours pets
0 This is a red apple 1 1 0
1 there are not dogs here 0 0 1