我正在尝试使用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
比方说,我想找到“好”和“酸奶”,创建一个列表,该数据集将为我提供以下列表:['好',','酸奶','好,酸奶']-因此给出空字符串或返回“无”,如果两个单词在同一行,请给我两个单词。然后,我可以在其中创建一个新列,这就是为什么即使每行都为空也很重要的原因。
大多数findall示例都涉及正则表达式符号,我正在尝试用单词列表来填充它。
答案 0 :(得分:2)
您可以将str.findall
与|
正则表达式运算符(意为“或”)一起使用
df['new_column'] = df.text.str.findall('good|yoghurt')
>>> 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]
如果您希望用逗号将单词连起来,按照您的问题所建议的方式,您可以应用', '.join
:
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
答案 1 :(得分:2)
使用get_dummies
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