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

Pandas如何动态筛选列名匹配指定规则的DataFrame目标列

Pandas 按列名前缀模糊筛选列实现方法

你要的类似SQL column_name LIKE 'Email%' 的筛选逻辑,直接用pandas列对象自带的字符串方法配合布尔索引就能实现,不需要额外安装第三方包。

基础实现(单前缀匹配)

先构造和你场景一致的测试DataFrame:

import pandas as pd

# 示例动态列DataFrame
df = pd.DataFrame(
    [
        ["张三", "zhangsan@demo.com", "13800000001", "李四", "lisi@demo.com", "13800000002"],
        ["王五", "wangwu@demo.com", "13800000003", "赵六", "zhaoliu@demo.com", "13800000004"]
    ],
    columns=["Name_1", "Email_1", "Phono_1", "Name_2", "Email_2", "Phono_2"]
)

要筛选所有Email开头、忽略后面数字后缀的列,直接用startswith做前缀匹配即可,逻辑和SQL的前缀LIKE完全一致:

# 提取所有以Email为前缀的列
target_columns = df.columns[df.columns.str.startswith("Email")]
# 筛选得到仅包含目标列的新DataFrame
df_result = df[target_columns]

运行后df_result会自动包含Email_1、Email_2所有符合前缀规则的列,不管后面的数字后缀是多少。

扩展用法

  • 多前缀同时匹配:如果要同时保留Name、Email两类列,直接给startswith传入前缀元组即可:
target_columns = df.columns[df.columns.str.startswith(("Name", "Email"))]
df_result = df[target_columns]
  • 大小写不敏感匹配:如果列名前缀存在大小写不统一的情况(比如email_1、EMAIL_2),先统一转小写再匹配:
target_columns = df.columns[df.columns.str.lower().str.startswith("email")]
  • 复杂规则匹配:如果需要更灵活的匹配规则(比如要严格匹配前缀_数字的格式),可以用正则匹配方法:
# 严格匹配Email_加纯数字后缀的列
target_columns = df.columns[df.columns.str.match(r"^Email_\d+$")]

性能提示:前缀匹配优先用startswith,比正则匹配执行速度更快,规则越简单性能优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:42:50