You need to enable JavaScript to run this app. Python Pandas 如何单步保留列名以x1或x4为前缀的列
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas 如何单步保留列名以x1或x4为前缀的列

问题根因

你之前的代码逻辑方向完全反了:df.columns.drop(传入列集合)的作用是从全部列里移除传入的那些列,你传入的恰恰是需要保留的x1/x4前缀列,自然会把目标列误删。要实现需求不需要走“反向删除”的绕路逻辑,直接匹配需要保留的列即可一步完成筛选。

可直接落地的单步实现
  • 方案1:适配你原有使用习惯的正则匹配写法
    直接用filter方法匹配符合规则的列,不需要额外做drop操作,代码为:
    df = df.filter(regex='^(x1|x4)')
    其中正则的^锚定列名字符串的开头位置,避免误选列名中间包含x1/x4的列,(x1|x4)表示任意匹配两个前缀分支,完全符合你的筛选要求。
  • 方案2:原生字符串匹配写法(性能更优)
    调用pandas内置的列名字符串方法直接批量判断前缀,单步完成索引选择,代码为:
    df = df.loc[:, df.columns.str.startswith(('x1', 'x4'))]
    str.startswith()支持直接传入元组形式的多前缀规则,纯字符串匹配的计算效率高于正则,适合列数较多的DataFrame。
  • 方案3:强制沿用你原有drop逻辑的写法
    如果你一定要保持“删除无关列”的实现思路,只需修正需要删除的列的匹配范围即可,代码为:
    df = df.drop(columns=df.columns[~df.columns.str.startswith(('x1', 'x4'))])
    该写法最终结果和前两个方案完全一致,但多了一次布尔反向判断的冗余步骤,不推荐优先使用。

小提示:如果存在列名前后带空格、前缀大小写不统一的情况,可以在列名字符串匹配链中追加.str.strip().str.lower()做预处理,避免匹配失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 07:15:03