Pandas DataFrame选取不连续列(0~32与第83列)报错求助
解决Pandas选取多组列的问题
嗨,这个问题我之前也踩过坑!你用df.columns[0:32, 83]行不通,是因为Pandas的列索引(Index对象)不支持这种多维切片的写法——它只能处理单一的切片、单个位置或者标签的选取。下面给你几个实用的解决办法:
方法一:用np.r_合并位置索引
借助NumPy的np.r_工具,可以轻松把连续切片和单个位置合并成一个一维索引数组,直接用来选取列:
import numpy as np df_new = df[df.columns[np.r_[0:32, 83]]]
np.r_[0:32, 83]会自动把0到31(切片左闭右开)的所有位置,和83这个单独位置合并成一个数组,这样就能一次性选中你需要的所有列了。
方法二:列表拼接(无需额外库)
如果不想导入NumPy,直接用列表拼接的方式更直观:
# 先把前32列转成列表,再加上第83列的列名 selected_cols = list(df.columns[0:32]) + [df.columns[83]] df_new = df[selected_cols]
这种方法逻辑清晰,新手也能一眼看懂,适合小数据量或者不想依赖第三方库的场景。
方法三:用iloc按位置直接选取
Pandas的iloc专门用于按位置索引选取数据,它支持传入组合的位置数组:
import numpy as np df_new = df.iloc[:, np.r_[0:32, 83]]
这里第一个冒号:表示选取所有行,第二个参数就是我们组合好的列位置数组,和方法一原理一致,但更直接。
小提醒
要注意你这里用的是位置索引(从0开始计数),如果你的列是自定义标签索引,那可能需要改用loc并传入对应的标签名称,但根据你的描述,用上面的方法完全没问题。
内容的提问来源于stack exchange,提问作者lignin
相关产品推荐
相关产品推荐

