包含一个单词并排除另一个python

时间:2018-03-14 04:03:44

标签: python regex pandas

背景:我有以下数据框

import pandas as pd
d = {'text': ["paid", "paid and volunteer", "other phrase"]}
df = pd.DataFrame(data=d)
df['text'].apply(str) 

输出

                   text
0                  paid
1    paid and volunteer
2          other phrase

目标:

1)检查每一行以确定是否存在paid并返回布尔值(如果True在文本列中的任何位置,则返回paid,如果{False则返回paid 1}}不存在。但我想排除单词volunteer。如果volunteer存在,则结果应为false

2)创建一个包含结果的新列

期望输出:

                   text     result
0                  paid     true
1    paid and volunteer     false
2          other phrase     false

问题:我使用以下代码

df['result'] = df['text'].astype(str).str.contains('paid') #but not volunteer

我检查了How to negate specific word in regex?,它显示了如何排除单词但我不确定如何在代码中加入

问题: 如何更改我的代码以实现我的目标1)和2)

2 个答案:

答案 0 :(得分:1)

使用lambda

df['result'] = df['text'].apply(lambda row: True if ('paid' in row) and ('volunteer' not in row) else False)

答案 1 :(得分:0)

您可以使用逻辑并检查两种情况。

(df.text.str.contains('paid')) & (~df.text.str.contains('volunteer'))
Out[14]: 
0     True
1    False
2    False
Name: text, dtype: bool