在所有Pandas DataFrame列中搜索String并进行过滤


问题内容

原本以为这很简单,但是在寻找一种优雅的方式来同时搜索数据帧中的所有列以查找部分字符串匹配时遇到了一些麻烦。基本上,我将如何一次应用于df['col1'].str.contains('^')整个数据框并筛选出包含包含匹配项的记录的任何行?


问题答案:

Series.str.contains方法需要正则表达式模式(默认情况下),而不是文字字符串。因此str.contains("^")匹配任何字符串的开头。由于每个字符串都有一个开始,因此所有内容都匹配。而是使用str.contains("\^")匹配文字^字符。

要检查每一列,您可以for col in df用来遍历列名,然后调用str.contains每一列:

mask = np.column_stack([df[col].str.contains(r"\^", na=False) for col in df])
df.loc[mask.any(axis=1)]

另外,您可以通过regex=Falsestr.contains使用Pythonin运算符进行测试;但是(通常)使用正则表达式会更快。