pandas dataframe:len(df)不等于df.iterrows()中的迭代次数

时间:2016-09-06 12:04:15

标签: python pandas dataframe

我有一个数据框,我想将每一行打印到另一个文件。当数据帧由例如只有50行,len(df)将打印50并迭代数据框的行,如

for index, row in df.iterrows():
    print(index)

会将索引从0打印到49

但是,如果我的数据框包含超过50&000; 000行,len(df)和迭代df.iterrows()时的迭代次数差别很大。例如,len(df)会说例如50' 554和打印指数将超过400&000; 000。

这怎么可能?我在这里缺少什么?

1 个答案:

答案 0 :(得分:6)

首先,正如@EdChum在评论中指出的那样,您的问题标题是指iterrows,但您提供的示例是指iteritems,它在与相关的正交方向上循环到len。我假设你的意思是iterrows(如标题中所示)。

请注意,无论DataFrame的大小如何,DataFrame的索引都不必是运行索引。例如:

df = pd.DataFrame({'a': [1, 2, 3, 4]}, index=[2, 4, 5, 1000])

>>> for index, row in df.iterrows():
...     print index
2
4
5
1000

据推测,你的长DataFrame只是以不同方式创建,或者经历了一些操作,影响了索引。

如果真的必须使用正在运行的索引进行迭代,则可以使用Python enumerate

>>> for index, row in enumerate(df.iterrows()):
...     print index
0
1
2
3

(请注意,在这种情况下,row本身就是一个元组。)