我会写一段代码,在Python中使用iterrows和next函数迭代DataFrame的每一行,下面是源代码:
import pandas as pd
#load data frame from csv file
fd = pd.read_csv('Pokemon.csv')
# iterate through each row
for _ in range(5):
_, row = next(df.iterrows())
print(row)
但是当我们运行代码时,它只显示第一行五次,这是什么问题?因为df.iterrows()是一个迭代器。但是当像这样改变循环时:
# iterate through each row
for _, row in df.iterrows():
print(row)
它显示前五行数据,那么为什么在循环中使用next函数和iterrows方法,它只显示第一行五次,而不是显示前五行数据?
....................
3条答案
按热度按时间42fyovps1#
在第一段代码中,当你使用next函数时,你在循环内部调用'next(df.iterrows())',每次运行时都会创建一个新的迭代器,从0开始。因此,它每次都会打印 Dataframe 的第一个索引。
第二段代码的工作方式是在循环外(声明中)使用'df.iterrows()',因此它可以正确运行。
尊重口袋妖怪数据框BTW
v64noz0r2#
因为你在每个循环中都调用了df.iterrows():
正确使用它:
但更好的方法是这样做:
6ojccjat3#
让我们暂时忘记
df.iterrows()
。你觉得下面的代码打印出来的效果如何?是的,它将打印
0
5次。它每次运行循环时都会创建一个新的迭代器,因此
next
对一个新的迭代器对象进行操作,并只给出第一个值。而且这也不是
df.iterroows()
的使用方式,在大多数情况下,正如mozway的评论所建议的那样,除非你已经探索了矢量化的方法,否则你不必使用iterrows()
,然后使用apply
,如果即使这样也不起作用,那么就使用iterrows()
。