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

为何循环中用next与iterrows遍历DataFrame会重复输出首行?

问题:next()结合iterrows()遍历DataFrame时重复输出第一行

我写了一段Python代码,尝试用iterrows()和next()遍历Pandas DataFrame的行:

import pandas as pd

# 从csv加载DataFrame
df = pd.read_csv('Pokemon.csv')

# 尝试遍历前5行
for _ in range(5):
    _, row = next(df.iterrows())
    print(row)

运行后发现代码重复输出第一行5次;但改用直接遍历的方式:

# 直接遍历行
for _, row in df.iterrows():
    print(row)

则能正常输出每一行。我疑惑:df.iterrows()是迭代器,为何结合next()在循环中使用会出现这种问题?

原因解析

核心问题在于:每次调用df.iterrows()都会生成一个全新的迭代器实例,而不是复用同一个迭代器。

  • 你在for _ in range(5)循环里,每次执行next(df.iterrows())时,都会重新创建一个从DataFrame第一行开始的迭代器,调用next()自然每次都取到第一行。
  • 而直接用for _, row in df.iterrows()遍历的方式,Python会在循环开始时创建唯一的一个迭代器,之后每次循环调用一次next(),顺着迭代器的进度依次取下一行,所以能正常遍历。

如果想用next()实现遍历前5行,正确的写法是先把迭代器存到变量里,再重复调用next():

import pandas as pd

df = pd.read_csv('Pokemon.csv')
# 先创建一次迭代器并保存
row_iter = df.iterrows()
for _ in range(5):
    _, row = next(row_iter)
    print(row)

这样每次next()调用的是同一个迭代器,就能依次获取前5行数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:50:00