
本文详解 pandas .iloc 的整数位置切片机制,重点解析 df.iloc[:, 0:6] 的含义与行为,并结合 pd.get_dummies() 展示其在机器学习数据预处理中的典型应用。
本文详解 pandas `.iloc` 的整数位置切片机制,重点解析 `df.iloc[:, 0:6]` 的含义与行为,并结合 `pd.get_dummies()` 展示其在机器学习数据预处理中的典型应用。
pandas.DataFrame.iloc 是基于整数位置(integer-location) 的索引器,与基于标签的 .loc 有本质区别:它不关心列名或索引值,只依据行号和列号(从 0 开始计数)进行定位。其语法为:
df.iloc[row_selector, column_selector]
其中,row_selector 和 column_selector 均支持切片(slice)、整数、整数列表或布尔数组。特别注意:切片在 .iloc 中是左闭右开区间,即 start:stop 包含 start,但不包含 stop。
以 df.iloc[:, 0:6] 为例:
-
:表示选择全部行(等价于0:len(df)); -
0:6表示选取列索引为0, 1, 2, 3, 4, 5的前六列(即第1至第6列),不包含列索引为6的列。
✅ 正确示例:
import pandas as pd
df = pd.DataFrame({
'A': ['x', 'y'],
'B': ['p', 'q'],
'C': [1, 2],
'D': ['red', 'blue'],
'E': [True, False],
'F': ['cat', 'dog'],
'G': [100, 200] # 第7列(索引6),不会被选中
})
X_subset = df.iloc[:, 0:6]
print(X_subset.columns.tolist()) # 输出: ['A', 'B', 'C', 'D', 'E', 'F']⚠️ 常见误区提醒:
- ❌
df.iloc[:, 0:6]≠df.iloc[:, [0,1,2,3,4,5,6]](后者会报错,因索引6越界); - ❌ 不支持列名切片(如
df.iloc[:, 'A':'F']会报错)——需改用.loc; - ❌ 若 DataFrame 列顺序动态变化(如经
reindex或读取时列序不固定),iloc[:, 0:6]仍严格按位置取列,可能意外截断目标特征,建议在生产环境中优先使用语义明确的列名选择(如df[['col1','col2',...]])或先校验列结构。
在实际机器学习流程中,该切片常与 pd.get_dummies() 配合完成分类变量编码:
X_encoded = pd.get_dummies(df.iloc[:, 0:6], drop_first=True)
pd.get_dummies() 会自动识别所选子集中的字符串型、类别型(category)或布尔型列,并为每个唯一值生成独立的 0/1 列(one-hot encoding),数值型列则保持原样。参数 drop_first=True 可避免共线性(如删除第一类作为基准)。
? 总结:.iloc[:, 0:6] 是高效、确定性强的位置切片方式,适用于列结构稳定且需按顺序批量处理前 N 列的场景;但务必牢记其“纯位置驱动”特性,在可维护性和可解释性要求高的项目中,建议辅以列名验证或封装为带文档的预处理函数。

















