Python中如何在DataFrame全列搜索字符串并返回表格形式结果
解决DataFrame全列搜索字符串返回行列表格的问题
我完全懂你的困扰——单列搜索时能直接拿到匹配的行,但全列搜就只得到一堆布尔值,根本没法直接用对吧?别担心,其实只要加一步就能把布尔矩阵转成你要的行列表格结果。
核心思路
当你用df.apply(lambda x: x.str.contains('目标字符串'))时,得到的是一个布尔值DataFrame(每个单元格标记该位置是否匹配)。我们需要把这个矩阵转换成每行的判断:只要该行任意一列匹配,就保留整行。
具体实现代码
import pandas as pd # 假设你的DataFrame是df,要搜索的字符串是target_str target_str = "你要查找的目标字符串" # 1. 生成每行的匹配掩码:只要该行有一列匹配,就返回True # na=False 是为了处理缺失值,避免出现NaN导致筛选失败 mask = df.apply(lambda col: col.str.contains(target_str, na=False)).any(axis=1) # 2. 用掩码筛选原DataFrame,得到匹配的行列表格 result_df = df[mask] # 查看结果 print(result_df)
关键细节说明
- 处理非字符串列:如果你的DataFrame里有数值、日期等非字符串类型的列,直接用
str.contains会报错,需要先把列转成字符串类型:mask = df.apply(lambda col: col.astype(str).str.contains(target_str, na=False)).any(axis=1) - 大小写敏感:默认
str.contains是大小写敏感的,如果需要忽略大小写,可以加case=False参数:col.str.contains(target_str, na=False, case=False)
示例演示
假设我们有这样一个DataFrame:
data = { 'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'City': ['New York', 'London', 'Paris', 'New Delhi'], 'Job': ['Engineer', 'Doctor', 'Teacher', 'Engineer'] } df = pd.DataFrame(data)
如果我们要搜索字符串"Engineer",运行上面的代码后,result_df会返回:
Name City Job 0 Alice New York Engineer 3 David New Delhi Engineer
完全是你想要的行列表格形式,和单列搜索的结果格式一致。
内容的提问来源于stack exchange,提问作者TYL
相关产品推荐
相关产品推荐

