试图理解Pandas的一些特性背后的设计原理。
如果我有一个具有3560行和18列的DataFrame,那么
len(frame)是3560,但是
len([a for a in frame])才18岁。
对于来自R的人来说,这可能是很自然的;对我来说,这感觉并不是很“Pythonic”。有没有介绍什么地方潘达的基本设计原理?
发布于 2014-09-18 16:59:25
DataFrame主要是一种基于列的数据结构.在遮罩下,DataFrame内部的数据存储在块中。粗略地说,每个dtype有一个块。每一列都有一个dtype。因此,可以通过从单个块中选择适当的列来访问列。相反,选择单个行需要从每个块中选择适当的行,然后形成一个新的Series,并将数据从每个块的行复制到Series中。因此,迭代遍历DataFrame的行并不像遍历列那样自然。
但是,如果需要迭代行,仍然可以调用df.iterrows()。如果可能的话,您应该避免使用df.iterrows,原因与它不正常的原因相同--它需要复制,这使得这个过程比在列中迭代要慢。
发布于 2014-09-18 16:57:14
在文档中有一个很好的解释-- Pandas DataFrames的迭代应该是"dict-like“,所以迭代就在键(列)上。
可以说,对于Series的迭代超过了值,这有点令人困惑,但正如docs注意到的那样,这是因为它们更像“数组”。
https://stackoverflow.com/questions/25918149
复制相似问题