如何优化实现从源DataFrame动态筛选A_*、B_*列生成新DataFrame
如何优化实现从源DataFrame动态筛选A_*、B_*列生成新DataFrame
嘿,我懂你不想写那种重复又生硬的条件判断代码,其实有更简洁灵活的方式来实现需求,完全不用纠结先选部分列再补全的问题~
你可以直接动态筛选符合命名规则的列,不用提前预判有多少个A_*或B_*列,下面给你两种实用的方法:
方法一:用字符串前缀筛选(简单直接)
这种方式适合只要列名以A_或B_开头就保留的场景,扩展性很强——哪怕以后新增A_3、B_3这类列,代码也不用改:
# 遍历所有列,筛选出以"A_"或"B_"开头的列 selected_cols = [col for col in df_source.columns if col.startswith(('A_', 'B_'))] df_new = df_source[selected_cols]
方法二:用正则表达式精准匹配(更严谨)
如果你的列名严格是A_数字或B_数字的格式,用正则表达式能更精准地匹配,避免误选其他类似命名的列:
import re # 匹配以A/B开头,后跟下划线和数字的列名 selected_cols = [col for col in df_source.columns if re.match(r'^[AB]_\d+$', col)] df_new = df_source[selected_cols]
为什么这两种方法更好?
对比你原来的写法,这两种方式:
- 不用写
if判断逻辑,代码更简洁 - 自动适配2列、4列甚至更多符合规则的列,扩展性拉满
- 保留源DataFrame中列的原有顺序,符合你的使用习惯
备注:内容来源于stack exchange,提问作者Coleman YU
相关产品推荐
相关产品推荐

