在列中查找特定单词
Finding specific words in a column
我正在尝试使用 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' 和 'yoghurt',创建一个列表,其中这个数据集会给我:['good',' ','yoghurt','good, yoghurt'] - 所以给出空字符串或返回 None 并给我两个单词(如果它们在同一行)。然后我可以从中创建一个新列,这就是为什么重要的是我得到每一行,即使是空的。
大多数 findall 示例都涉及正则表达式符号,我正在尝试为其提供一个单词列表。
您可以将 str.findall
与 |
正则表达式运算符一起使用(意思是 "or")
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
使用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
我正在尝试使用 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' 和 'yoghurt',创建一个列表,其中这个数据集会给我:['good',' ','yoghurt','good, yoghurt'] - 所以给出空字符串或返回 None 并给我两个单词(如果它们在同一行)。然后我可以从中创建一个新列,这就是为什么重要的是我得到每一行,即使是空的。
大多数 findall 示例都涉及正则表达式符号,我正在尝试为其提供一个单词列表。
您可以将 str.findall
与 |
正则表达式运算符一起使用(意思是 "or")
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
使用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