2014-09-18 105 views
7

试图理解一些熊猫功能背后的设计原理。为什么Pandas默认迭代DataFrame列?

如果我有3560行和18列的数据帧,然后

len(frame) 

是3560,但

len([a for a in frame]) 

为18

也许这种感觉自然有人来了R等对我来说,它并不觉得'Pythonic'。是否有熊猫的基本设计理念介绍?

回答

14

DataFrame主要是一个基于列的数据结构。 在引擎盖下,DataFrame中的数据存储在块中。粗略地说,每个dtype有一个块。 每列有一个dtype。因此,访问列可以通过从一个块中选择适当的列来完成。相反,选择单行需要从每个块中选择适当的行,然后形成一个新的Series,并将每个块的行中的数据复制到Series中。 因此,迭代DataFrame的行(在引擎盖下)并不像循环遍历列那样自然。

如果您需要遍历行,您仍然可以通过调用df.iterrows()。如果可能的话,应该避免使用df.iterrows,这是因为它存在不自然的原因 - 它需要进行复制,使得该过程比遍历列更慢。

4

docs中有一个体面的解释 - 大熊猫的迭代DataFrames的意思是“字典式的”,所以迭代遍及键(列)。

可以说系列的迭代超过了值是有点令人困惑,但正如文档所指出的,那是因为它们更像“数组”。

相关问题