You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:51:02