【问题标题】:Matching keywords (strings) with a Pandas Dataframe使用 Pandas 数据框匹配关键字(字符串)
【发布时间】:2020-04-23 15:16:05
【问题描述】:
我有一个要与某些关键字匹配的数据框(我想检测包含这些关键字的行)
我设法通过这种方式得到了这份工作。但我想知道是否有更好的方法来做到这一点,因为我可能有多达 10 或 20 个不同的关键字。
df1 = df[df['column1'].str.contains("keyword1") | df['column1'].str.contains('keyword2')]
(我是初学者,请尽量简单)
【问题讨论】:
标签:
python
string
pandas
dataframe
match
【解决方案1】:
对于或逻辑,您可以通过将单词与| 连接来创建单个模式。将您的 10-20 个单词存储在一个列表中,然后 '|'.join(that_list)。
import pandas as pd
import numpy as np
df = pd.DataFrame({'col1': ['foo', 'bar', 'baz', 'foobar', 'boo']})
words = ['foo', 'bar']
df['foo_OR_bar'] = df['col1'].str.contains('|'.join(words))
# col1 foo_OR_bar
#0 foo True
#1 bar True
#2 baz False
#3 foobar True
#4 boo False
#To slice by that Boolean Series
df1 = df.loc[df['col1'].str.contains('|'.join(words))]
如果您的加入逻辑是和,那么我们可以使用np.logical_and.reduce 和列表推导来保持简洁。
df['foo_AND_bar'] = np.logical_and.reduce([df.col1.str.contains(w) for w in words])
# col1 foo_OR_bar foo_AND_bar
#0 foo True False
#1 bar True False
#2 baz False False
#3 foobar True True
#4 boo False False