Pandas DataFrame使用iloc同时选取连续非连续多列报错
报错原因
代码运行失败是因为Python原生列表不支持直接把35:45这类切片表达式和单个整数位置混写在列表里,作为iloc的索引参数传入,属于语法层面的写法错误。
可行解法
写法1:numpy快速拼接(最简便)
借助numpy的索引拼接函数,直接把非连续单列、连续列切片拼合成合法的位置索引数组即可:
import numpy as np X = d.iloc[:, np.r_[13, 30, 35:45]].values
np.r_会自动把传入的单个位置、切片展开拼接成完整的整数位置序列,完全适配iloc的位置选数规则,最终选中的列和预期一致:索引13的列、索引30的列,加索引35到44的所有连续列(切片默认左闭右开,45是截止位不会被选中)。
写法2:纯Python实现(无需额外依赖)
不想导numpy的话,手动把连续列转成列表,和非连续列的索引拼起来就行:
selected_cols = [13, 30] + list(range(35, 45)) X = d.iloc[:, selected_cols].values
两种写法效果完全相同。
注意点
iloc是严格按位置选数的,索引从0开始计数,不受DataFrame自定义列名、行索引值影响- 如果要把索引为45的列也包含进去,连续段要改成
35:46或者range(35, 46),避免漏选
内容的提问来源于stack exchange,提问作者Helen
相关产品推荐
相关产品推荐

