如何不指定单列,筛选整个DataFrame中包含指定文本的行
解决方案
你可以直接用pandas自带的全表匹配+按行判断逻辑实现,不需要指定任何列名:
完全匹配"Bob"的场景
核心代码只有一行:
filtered_df = df[df.eq('Bob').any(axis=1)]
逻辑说明:
df.eq('Bob')会遍历整个DataFrame的所有单元格,和Bob做等值判断,返回和原DataFrame结构完全一致的布尔值表,匹配到Bob的位置为True,其余为Falseany(axis=1)会逐行检查布尔值表,只要某一行存在至少一个True,就给这一行返回True,代表该行符合筛选条件- 最后用生成的布尔序列对原DataFrame做行过滤,就能得到所有任意列含
Bob的行
模糊匹配包含"Bob"的场景
如果需要匹配单元格内容包含Bob的情况(比如值为Bob Smith也能命中),可以用下面的代码:
filtered_df = df[df.apply(lambda x: x.str.contains('Bob', na=False)).any(axis=1)]
加na=False是为了避免单元格为空时抛出异常。
完整测试示例
你可以用下面的代码验证效果:
import pandas as pd # 构造你给出的示例DataFrame df = pd.DataFrame([ ['Adam', 'Ron', 'Bob', 'Ron'], ['Ron', 'Bob', 'Ron', 'Adam'], ['Ron', 'Ron', 'Adam', 'Kelly'] ], columns=['Name', 'Name', 'Name', 'Name']) # 筛选 filtered_df = df[df.eq('Bob').any(axis=1)] print(filtered_df)
运行后输出的结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者Andres Green
相关产品推荐
相关产品推荐

