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

如何在Pandas中一次性删除多段连续列?

Pandas DataFrame 删除多段连续列的最优方案

问题背景

需要从DataFrame中删除多段连续列,最终仅保留color和color2列。原本尝试用iloc分多行执行drop操作,但因每次删除后列索引重新调整,导致无需保留的列仍存在,希望用一行代码实现需求。

原始代码问题分析

原始代码中每次调用drop后,DataFrame的列会被重新排列,后续的iloc索引引用的是更新后的列位置,而非原始位置,因此无法准确删除目标列。比如第一次删除前2列后,剩余列的索引已发生变化,后续的iloc[:,4:5]指向的列已不是预期的目标列。

最优解决方案

方案1:直接保留指定列(推荐)

既然明确知道需要保留的列名,直接选择这些列是最简洁高效的方式,无需计算要删除的列:

import pandas as pd
df = pd.DataFrame({'id': [100,200,300], 'user': ['Bob', 'Jane', 'Alice'], 'income': [50000, 60000, 70000], 'color':['red', 'green', 'blue'], 'state':['GA', 'PA', 'NY'], 'day':['M', 'W', 'Th'], 'color2':['red', 'green', 'blue'], 'state2':['GA', 'PA', 'NY'], 'id2': [100,200,300]})

# 直接保留目标列
df = df[['color', 'color2']]

也可以用reindex实现,效果一致:

df = df.reindex(columns=['color', 'color2'])

方案2:合并要删除的列索引后一次性删除

如果坚持用索引方式删除,先合并所有需要删除的连续列的索引,再一次性执行删除操作,避免多次删除导致的索引偏移问题:

import pandas as pd
df = pd.DataFrame({'id': [100,200,300], 'user': ['Bob', 'Jane', 'Alice'], 'income': [50000, 60000, 70000], 'color':['red', 'green', 'blue'], 'state':['GA', 'PA', 'NY'], 'day':['M', 'W', 'Th'], 'color2':['red', 'green', 'blue'], 'state2':['GA', 'PA', 'NY'], 'id2': [100,200,300]})

# 合并所有要删除的列的原始索引
drop_indices = list(range(0, 3)) + list(range(4, 6)) + list(range(7, 9))
# 一次性删除目标列
df.drop(df.columns[drop_indices], axis=1, inplace=True)

解释:原始DataFrame中,color在索引3,color2在索引6,因此需要删除的是索引0-2(id、user、income)、4-5(state、day)、7-8(state2、id2),合并这些索引后一次性删除即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:42:04