【问题标题】:pandas dataframe: len(df) is not equal to number of iterations in df.iterrows()熊猫数据框:len(df) 不等于 df.iterrows() 中的迭代次数
【发布时间】:2017-01-13 21:20:31
【问题描述】:

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

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

将打印从049 的索引。

但是,如果我的数据框包含超过 50'000 行,len(df) 和迭代 df.iterrows() 时的迭代次数会显着不同。例如,len(df) 会说例如50'554 和打印索引将超过 400'000。

这怎么可能?我在这里错过了什么?

【问题讨论】:

  • 因为iteritems返回列名系列对,请查看文档
  • 您可能也最好使用df.shape 并索引您需要的维度
  • 只是好奇 - 但您真的打算创建 50k 个文件吗?
  • 我知道,我知道,但是 sm1 要求我这样做,因为他们需要文件以使用其他工具进行下一步...

标签: python pandas dataframe


【解决方案1】:

首先,正如@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

据推测,您的 long DataFrame 只是创建方式不同,或者进行了一些操作,从而影响了索引。

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

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

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

【讨论】:

  • 是的,我的意思是iterrows(),很抱歉这个错误。
猜你喜欢
  • 2020-05-17
  • 2015-12-09
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多