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

如何在未知列/索引的DataFrame中查找含指定数字的列

解决方法

我们可以利用Pandas的矢量化字符串操作结合正则表达式高效实现需求,全程避免暴力遍历行列,核心是通过精确匹配判断每列是否存在目标数字。

步骤代码

  1. 先构建示例DataFrame:
import pandas as pd

data = {'name1': ['1456, 1324, 4782', '5428'], 
        'name2': ['7832, 1477, 8092', ''], 
        'name3': ['9496', '7842, 8326'], 
        'name4': ['5532, 1886', '7732, 6512, 9044']}
df = pd.DataFrame(data)
  1. 定义目标数字并构建精确匹配模式:
    用正则的\b(单词边界)确保只匹配完整数字,避免出现找147时误匹配1477这类部分匹配的问题。
target = '1477'  # 转成字符串,和列中数据格式保持一致
pattern = rf'\b{target}\b'
  1. 筛选包含目标数字的列:
# 对每列检查是否存在匹配行,返回标记列是否符合的布尔Series
col_match_mask = df.apply(lambda col: col.str.contains(pattern, na=False)).any(axis=0)

# 提取匹配的列名列表
matched_cols = col_match_mask[col_match_mask].index.tolist()
print(matched_cols)  # 输出: ['name2']

关键说明

  • 高效性:apply配合str.contains是Pandas优化过的矢量化操作,比手动循环行列效率高得多,完全适配大数据量场景。
  • 空值处理:na=False参数确保空字符串或缺失值直接被判定为不匹配,不会干扰结果。
  • 精确匹配:正则\b会匹配数字前后的非单词字符(逗号、空格、字符串开头/结尾),保证只命中完整的目标数字。

扩展测试

比如查找数字5428会得到['name1'],查找9044会得到['name4'],完全符合预期。

内容的提问来源于stack exchange,提问作者Luke M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:16