Python 在列中查找特定单词

Python 在列中查找特定单词,python,regex,pandas,findall,Python,Regex,Pandas,Findall,我试图使用findall函数在数据帧的列中查找字符串中的4个特定单词 df = pd.DataFrame({'case':('Case1','Case2','Case3','Case4'), 'text':('good boy', 'bad girl', 'yoghurt', 'good girl yoghurt')}) case text 0 Case1 good boy 1 Case2 bad girl 2 Case3

我试图使用findall函数在数据帧的列中查找字符串中的4个特定单词

df = pd.DataFrame({'case':('Case1','Case2','Case3','Case4'),
                   'text':('good boy', 'bad girl', 'yoghurt', 'good girl yoghurt')})
    case    text
0   Case1   good boy
1   Case2   bad girl
2   Case3   yoghurt
3   Case4   good girl yoghurt
假设我想找到'good'和'yoghter',创建一个列表,该数据集将为我提供:['good','','yoghter','good,yoghter']-因此,如果两个单词在同一行中,则提供空字符串或不返回,并同时提供给我这两个单词。然后我可以从中创建一个新的列,这就是为什么获取每一行(即使是空的)很重要的原因

大多数findall示例都涉及正则表达式符号,我试图用一系列单词来填充它

您可以与
|
正则表达式操作符一起使用(意思是“或”)

如果你想用逗号将单词连接起来,按照你的问题建议的方式,你可以应用
,'

df['new_column'] = df.text.str.findall('(good|yoghurt)').apply(', '.join,1)
>>> df
    case               text     new_column
0  Case1           good boy           good
1  Case2           bad girl               
2  Case3            yoghurt        yoghurt
3  Case4  good girl yoghurt  good, yoghurt

使用
get_假人

s=df.text.str.get_dummies(sep=' ')[['good','yoghurt']]
s.eq(1).dot(s.columns+',').str[:-1]
Out[23]: 
0            good
1                
2         yoghurt
3    good,yoghurt
dtype: object

有没有办法去掉括号?我选择了使用“
”和“.join”
,这对你来说解决不了吗?结果是一列字符串,而不是列表
s=df.text.str.get_dummies(sep=' ')[['good','yoghurt']]
s.eq(1).dot(s.columns+',').str[:-1]
Out[23]: 
0            good
1                
2         yoghurt
3    good,yoghurt
dtype: object