为何循环中用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
相关产品推荐
相关产品推荐

