我尝试理解Pandas一些特性背后的设计原理。
如果我有一个包含3560行和18列的DataFrame,则
len(frame)
是3560,但是
len([a for a in frame])
年龄为18岁。
对于熟悉R语言的人来说,这种方式可能很自然;但对我来说,这并不像是很符合Python风格的。有没有一些介绍Pandas底层设计理念的入门资料呢?
一个DataFrame主要是基于列(column)的数据结构。在底层,DataFrame内部的数据是按块存储的。 大体上来说,每个dtype有一个块。每个列有一个dtype。因此,通过从单个块中选择适当的列来访问列可以完成。相反,选择单个行需要从每个块中选择适当的行,然后形成一个新的Series,并将每个块的行数据复制到Series中。 因此,遍历DataFrame的行(在底层)不像遍历列那么自然。
如果您需要遍历行,仍然可以通过调用df.iterrows()
来实现。应尽可能避免使用df.iterrows()
,原因是它需要进行复制,这使得该过程比遍历列更慢。
len
与迭代一致... :-/ - Michel de Ruiter