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

如何通过整数索引选取Pandas DataFrame行?解析索引行为差异

Pandas中[]切片与iloc的行为差异解析

核心概念区分

Pandas的索引系统分为两类,这是问题的根源:

  • 标签索引(Label Index):DataFrame每行自带的索引值(比如你筛选后得到的Index([3,4,5,8])),可以是非连续、非整数甚至字符串类型。
  • 位置索引(Position Index):每行在DataFrame中的物理位置,从0开始的连续整数,和行的排列顺序一一对应。

1. 直接使用df_selected[3:9]的行为

当你用[]做切片时,Pandas默认是基于标签索引的切片逻辑:它会选取标签值大于等于起始值、小于结束值的所有行。
在你的例子中,df_selected的标签是[3,4,5,8],所有标签都满足3 ≤ 标签 < 9,所以这个切片会返回全部4行——但这是标签匹配的结果,不是按位置选取的逻辑。


2. iloc[A:B]的行为逻辑

iloc是Pandas专门用于位置索引的方法,全称是integer location,它的参数只认行的物理位置(从0开始计数),和DataFrame的标签索引完全无关:

  • iloc[0:4]表示选取第0到第3行(左闭右开区间),正好对应df_selected里的所有4行。这和reset_index()后的连续整数标签数值一致,但本质不是隐式调用了reset_index(),而是iloc本身就是按物理位置定位。

为什么要做这样的设计?

Pandas的设计目标是支持灵活的索引体系:

  • 标签索引可以标记有业务含义的行(比如时间序列的日期、用户ID等),用[]切片可以直接按业务标签范围选取数据。
  • 位置索引则用于单纯按排列顺序选取数据,不管行的标签是什么,iloc就是干这个的。
    这种区分避免了歧义——如果统一用整数做索引,当标签是连续整数时,系统无法判断你是要按标签还是按位置选取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:40:19