在列表中搜索所有pandas列



下面是我的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)]

如果要匹配精确的单词,请使用isinany组合:

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匹配组合applystr.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

相关内容

  • 没有找到相关文章

最新更新