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

如何使用pandas的iloc选取DataFrame两段不连续列并保留全部行

语法报错原因及修正写法

你写的df.iloc[:,[0:12,16:]]不符合Python语法规则:切片表达式a:b不能直接作为列表的元素传入,仅能在索引操作符[]内直接使用,或是转换为范围对象后再拼接。
pandas中实现跨范围选列的正确写法有两种:

  • 方法1(需引入numpy):使用np.r_将多个切片转换为连续的索引数组,注意pandas切片为左闭右开规则,要取0-12列需写0:13,取16-27列需写16:28:
import numpy as np
X = df.iloc[:, np.r_[0:13, 16:28]]
  • 方法2(无额外依赖):手动拼接目标列的索引列表:
selected_cols = list(range(13)) + list(range(16, df.shape[1]))
X = df.iloc[:, selected_cols]
NaN异常原因

你临时写的代码是算术加法操作,不是列拼接操作:pandas中两个DataFrame做+运算时,会自动按列名、行索引对齐后计算值,你的两个子DataFrame列名完全不重叠,所以所有位置计算结果都会填充为NaN,完全不符合你要的合并列的需求。
正确的列拼接写法如下:

X = pd.concat([df.iloc[:, 0:13], df.iloc[:, 16:]], axis=1)

另外要注意你原来写的0:12实际只能取到0到11列,会漏掉第12列,需要修正为0:13。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:06:01