在列表所有 pandas 列中搜索词
search word in list all pandas columns
下面是我的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
combined with 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
对于正则表达式匹配合并 apply
and 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
下面是我的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
combined with 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
对于正则表达式匹配合并 apply
and 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