如何通过索引删除Pandas DataFrame指定区间内的列
问题原因
df.drop()方法接收的删除目标为待删除的列标签/列名集合,你传入的df.iloc[:, 1:55]是对应列的实际数据子集,参数格式不匹配,因此无法达到预期删除效果。
正确实现方案
分两种场景处理:
场景1:删除的是「从左到右计数的第1950~2004位列」(整数位置索引)
直接取对应位置的列名列表传入即可,注意Python切片为左闭右开规则,要包含2004位列时结束索引需写为2005:
test = df.drop(df.columns[1950:2005], axis=1)
也可以通过反向保留需要的列实现,逻辑更直观不容易出错:
import numpy as np # 保留1950位之前、2005位之后的所有列 test = df.iloc[:, np.r_[0:1950, 2005:df.shape[1]]]
场景2:删除的是「列名本身为1950~2004的列」(列名为年份格式的数值/字符串)
直接生成对应列名列表传入即可:
# 列名为整数时用这行 drop_cols = list(range(1950, 2005)) # 列名为字符串时替换为这行 # drop_cols = [str(i) for i in range(1950, 2005)] test = df.drop(drop_cols, axis=1)
内容的提问来源于stack exchange,提问作者Barakat Haroon
相关产品推荐
相关产品推荐

