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

为何df.reset_index().index与df.reset_index()['index']输出不同?

pandas中reset_index()后索引访问的疑问解答

测试代码

import pandas as pd
df1 = pd.DataFrame({
    "value": [1, 1, 1, 2, 2, 2]})
print(df1)
print("-------------------------")
print(df1.reset_index())
print("-------------------------")
print(df1.reset_index().index)
print("-------------------------")
print(df1.reset_index()["index"])

运行输出

value
0      1
1      1
2      1
3      2
4      2
5      2
-------------------------
   index  value
0      0      1
1      1      1
2      2      1
3      3      2
4      4      2
5      5      2
-------------------------
RangeIndex(start=0, stop=6, step=1)
-------------------------
0    0
1    1
2    2
3    3
4    4
5    5
Name: index, dtype: int64

疑问解答

为什么两个输出不同?

这俩语句访问的是完全不同的对象:

  • df1.reset_index().index:调用reset_index()会生成一个新的DataFrame,.index是DataFrame的内置属性,它指向的是这个新DataFrame自带的默认行索引(也就是输出里最左边无列名的0-5序列),所以打印的是这个索引的类型和参数信息(RangeIndex)。
  • df1.reset_index()["index"]:reset_index()的核心作用就是把原DataFrame的行索引提取出来,转换成一个名为index的新列。这里用方括号是按列名直接访问这个新生成的列,所以打印的是该列的具体数据(一个pandas Series对象)。

访问重置后生成的"index"列必须用方括号吗?

不是必须,还有几种替代写法:

  • 使用.loc索引器:df1.reset_index().loc[:, "index"]
  • 使用.get()方法:df1.reset_index().get("index")

⚠️ 注意:这里不能用点语法(比如df1.reset_index().index),因为.index已经被DataFrame的内置索引属性占用了,点语法会优先返回内置索引而非新生成的index列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:55:15