Python Pandas索引疑问:位置索引与显式索引切片结果行数不同
Pandas索引切片的差异解析
在Pandas里,位置索引切片和显式标签切片的行为规则存在差异,这就是你看到结果行数不同的核心原因:
1. 位置索引切片的行为
当使用数字位置进行切片时(比如data[1:3]),遵循左闭右开的规则:
- 包含起始位置(索引1)对应的元素
- 不包含结束位置(索引3)对应的元素
对应示例:
data[1:3] # 输出: # 1 0.50 # 2 0.75 # dtype: float64
最终得到索引1、2对应的2行数据。
2. 显式标签索引切片的行为
当使用自定义标签进行切片时(比如data['b':'d']),遵循左闭右闭的规则:
- 同时包含起始标签('b')和结束标签('d')对应的元素
对应示例:
data = pd.Series([0.25, 0.5, 0.75, 1.0], index=['a', 'b', 'c', 'd']) data['b':'d'] # 输出: # b 0.50 # c 0.75 # d 1.00 # dtype: float64
最终得到'b'、'c'、'd'对应的3行数据。
关于loc和iloc的补充
iloc是专门用于位置索引的方法,data.iloc[1:3]和data[1:3]行为完全一致,都是左闭右开。loc是专门用于标签索引的方法,data.loc['b':'d']和data['b':'d']行为完全一致,都是左闭右闭。
这种设计是因为标签通常是无规律的字符串或非连续数字,左闭右闭的规则更符合“取从X到Y所有元素”的直观需求;而位置索引是连续数字,遵循编程领域常见的左闭右开切片逻辑(比如Python原生列表的切片)。
内容的提问来源于stack exchange,提问作者Indrani Sarkar
相关产品推荐
相关产品推荐

