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

如何在Pandas的iterrows()中获取行位置而非行索引?

获取DataFrame行位置而非自定义索引的方法

嘿,完全懂你的困扰!你把month设成了DataFrame的自定义索引后,iterrows()返回的第一个元素就变成了这个自定义索引值(也就是Jan、Feb这些),但你想要的是从0开始的行位置序号对吧?给你几个简单的解决方案:

方法1:用enumerate()包裹iterrows()

这是最直接的方式,不需要修改原DataFrame,就能同时拿到行位置和原索引、行数据:

df = pd.DataFrame({'month': ['Jan', 'Feb', 'March', 'April'], 'year': [2012, 2014, 2013, 2014], 'sale':[55, 40, 84, 31]})
df = df.set_index('month')

# 用enumerate获取行位置pos
for pos, (idx, value) in enumerate(df.iterrows()):
    print(pos)

运行后就会输出你想要的:0 1 2 3(每行一个数字)。

方法2:重置索引后使用iterrows()

如果之后你还需要频繁用到默认整数索引,也可以先把索引重置,让默认的0开始的整数索引回来:

df = pd.DataFrame({'month': ['Jan', 'Feb', 'March', 'April'], 'year': [2012, 2014, 2013, 2014], 'sale':[55, 40, 84, 31]})
df = df.set_index('month')

# 重置索引,默认生成0开始的整数索引
df_reset = df.reset_index()
for pos, row in df_reset.iterrows():
    print(pos)

这种方式下,pos就是行位置,同时你还能通过row['month']访问原来的自定义索引值。

方法3:用itertuples()配合enumerate()

如果你追求更高的遍历效率(itertuples()比iterrows()更快),也可以这么写:

df = pd.DataFrame({'month': ['Jan', 'Feb', 'March', 'April'], 'year': [2012, 2014, 2013, 2014], 'sale':[55, 40, 84, 31]})
df = df.set_index('month')

for pos, row in enumerate(df.itertuples()):
    print(pos)
    # 如果需要原索引,可以用row.Index
    # print(row.Index)  # 会输出Jan、Feb等

简单总结一下:你之前的问题是因为自定义索引替换了默认的整数索引,iterrows()返回的是自定义索引而非行位置,用上面的方法就能轻松拿到你要的行序号啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:15