下面是我的DF
df = pd.DataFrame({'a' : ['NYC', 'NYC', 'Boston', 'LA', 'SF', 'NYC'], 'b' : ['Other', 'Other', 'NY', 'NUI', 'SD', 'SF']})
a b
0 NYC Other
1 NYC Other
2 Boston NY
3 LA NUI
4 SF SD
5 NYC SF
目的是检查单词列表是否在df
下面是检查特定单词
的代码word = 'SF'
mask = np.column_stack([df[col].str.contains(word, na=False) for col in df])
df.loc[mask.any(axis=1)]
a b
4 SF SD
5 NYC SF
如何使用列表而不是字符串来执行?
word = ['SF', 'NY']
您可以从术语中形成一个正则表达式,并使用它:
word = ['SF', 'NY']
regex = r'^(?:' + r'|'.join(word) + ')$'
mask = np.column_stack([df[col].str.contains(regex, na=False) for col in df])
df.loc[mask.any(axis=1)]
如果要匹配精确的单词,请使用isin
和any
组合:
word = ['SF', 'NY']
df[df.isin(word).any(1)]
输出:
a b
2 Boston NY
4 SF SD
5 NYC SF
中间体:
df.isin(word)
a b
0 False False
1 False False
2 False True
3 False False
4 True False
5 False True
df.isin(word).any(1)
0 False
1 False
2 True
3 False
4 True
5 True
dtype: bool
对于一个regex匹配组合apply
和str.contains
:
word = ['SF', 'NY']
regex = '|'.join(word)
df[df.apply(lambda c: c.str.contains(regex)).any(1)]
输出:
a b
0 NYC Other
1 NYC Other
2 Boston NY
4 SF SD
5 NYC SF