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

如何单步从Pandas DataFrame中选取a、c-g列并排除b列

Pandas 单步选取指定列范围并排除特定列实现方案

你可以直接通过单条命令完成「选取a到g列区间、排除b列」的需求,不需要分两步执行删除操作,也不需要手动枚举所有目标列。

首先需要注意:你当前的写法逻辑是反向的,~df.columns.isin(columns)会排除你传入列表里的所有列,和你想要保留这些列的需求刚好相反。

原生的df.loc[:,'a':'g']连续切片语法不支持直接在语句内写排除规则,配合pandas索引的内置方法即可实现需求,推荐两种写法:

  • 鲁棒性写法(不依赖列的固定排列位置,只要列名存在就可正常运行)
df2 = df.loc[:, df.columns[df.columns.get_loc('a') : df.columns.get_loc('g')+1].difference(['b'], sort=False)]

代码逻辑说明:

  1. 用get_loc()分别拿到列a和列g对应的索引位置,由于位置切片是左闭右开规则,取g的位置后+1保证g列被包含
  2. 取到a到g的连续列索引后,用difference(['b'], sort=False)直接排除b列,sort=False参数可以保证列保留原表中的相对顺序,不会被自动重排,最终返回的列就是你需要的a、c、e、f、g
  • 如果你确定列顺序不会变动,可以写得更简洁:
# 对应你给出的列顺序,前6列就是a、b、c、e、f、g,排除b后即为目标列
df2 = df.loc[:, df.columns[:6].difference(['b'], sort=False)]

如果你后续需要排除多个列,只需要给difference()传入对应的列名列表即可,比如要同时排除b和d,就写.difference(['b','d'], sort=False)

内容的提问来源于stack exchange,提问作者Lucas Cordeiro Romão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:51:19