如何检测单词是否存在并在单独的列中标记问题?

时间:2018-07-26 06:35:03

标签: python pandas text

我有很多列表,每个列表包含某些单词,即

fruits = ['apple','banana','cherry']
colours = ['red','blue','yellow']
pets = ['dog','cat','fish']

我在Pandas中有一列文字。我想检查我的文本中是否包含每个列表中的任何单词,并在同一数据框中创建新列。列标题基于列表的名称:

我的桌子应该像这样:

我应该如何在Python中执行此操作?

1 个答案:

答案 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