为什么Pandas默认会迭代DataFrame列?

trv*_*vrm 8 python pandas

试图了解一些熊猫特征背后的设计理念.

如果我有一个包含3560行和18列的DataFrame,那么

len(frame)
Run Code Online (Sandbox Code Playgroud)

是3560,但是

len([a for a in frame])
Run Code Online (Sandbox Code Playgroud)

是18岁.

也许这对来自R的人来说很自然; 对我而言,它并不像'Pythonic'.Pandas的基础设计理念是否有介绍?

unu*_*tbu 15

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

如果您需要遍历行,您仍然可以通过调用df.iterrows().df.iterrows如果可能的话,你应该避免使用它出于同样的原因 - 它不自然 - 它需要复制,这使得进程比迭代遍历列更慢.


chr*_*isb 5

文档中有一个不错的解释- Pandas DataFrames 的迭代意味着“类似字典”,因此迭代是在键(列)上进行的。

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