能否在iloc函数中混用索引位置与切片?实现列重排并保留所有列
在pandas iloc中混合单个索引与切片的实现方法
直接用iloc[:, [1,2,3,27, 4:27]]这种写法行不通——Python列表里不能嵌套切片对象(4:27是切片语法,不是合法的列表元素),运行会直接抛出语法错误。
要实现「混合单个索引+切片重排列列,且包含所有列」的需求,有两种简单的解决方式:
方法1:手动转换切片为索引列表
把切片4:27转换成对应的索引范围列表(注意切片是左闭右开,4:27对应索引4到26),再和单个索引合并:
# 构造目标列索引列表 target_cols = [1, 2, 3, 27] + list(range(4, 27)) # 用iloc选取列 result_df = df.iloc[:, target_cols]
如果你的DataFrame包含索引为0的列,记得把0也加入到target_cols中(比如[0,1,2,3,27] + list(range(4,27))),确保所有列都被包含。
方法2:用numpy简化切片合并
借助numpy.r_可以直接把单个索引和切片合并成索引数组,写法更简洁:
import numpy as np # 自动将切片转为索引数组并合并 target_cols = np.r_[1, 2, 3, 27, 4:27] result_df = df.iloc[:, target_cols]
np.r_会自动处理切片到索引列表的转换,省去手动调用range()的步骤。
不管用哪种方法,最终的target_cols都会是一个包含所有需要索引的列表/数组,传给iloc后就能按指定顺序输出所有列。
内容的提问来源于stack exchange,提问作者JoyceD
相关产品推荐
相关产品推荐

