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

时间:2014-09-18 16:44:37

标签: python pandas

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

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

len(frame)

是3560,但是

len([a for a in frame])

是18岁。

对于来自R的人来说,这感觉很自然;对我而言,感觉不是'Pythonic'。 Pandas在某处有基础设计理论的介绍吗?

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:4)

docs迭代中有一个不错的解释,Pandas DataFrames的意思是“像dict一样”,所以迭代是在键(列)之上。

可疑的是,对于Series的迭代超过了值,这有点令人困惑,但正如文档所指出的那样,那是因为它们更像是“类似数组”。