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
相关产品推荐
相关产品推荐

