试图理解Pandas的一些功能背后的设计原理。如果我有一个3560行18列的DataFrame,那么
len(frame)
是3560但是
len([a for a in frame])
是18岁。也许这对来自R的人来说感觉很自然;对我来说,它并不觉得很“Python”。有没有介绍潜在的设计原理的Pandas某处?
xuo3flqw1#
DataFrame主要是一种基于列的数据结构。实际上,DataFrame中的数据存储在块中。粗略地说,每个数据类型对应一个块。* 每个列有一个数据类型 *。因此,通过从单个块中选择适当的列可以访问列。相反,选择单个行需要从每个块中选择适当的行然后形成新的系列并将数据从每个块的行复制到该系列中。因此,遍历DataFrame的行(实际上)并不像遍历列那样自然。但是,如果需要迭代行,仍然可以通过调用df.iterrows()来实现,应该尽可能避免使用df.iterrows,原因与使用它不自然的原因相同--它需要复制,这会使过程比迭代列慢。
df.iterrows()
df.iterrows
xmjla07d2#
在文档中有一个很好的解释-Pandas DataFrame的迭代应该是“类似于dict的”,所以迭代是在键(列)上进行的。可以说,Series的迭代是在值上进行的,这有点令人困惑,但正如文档所指出的,这是因为它们更像“数组”。
2条答案
按热度按时间xuo3flqw1#
DataFrame主要是一种基于列的数据结构。实际上,DataFrame中的数据存储在块中。粗略地说,每个数据类型对应一个块。* 每个列有一个数据类型 *。因此,通过从单个块中选择适当的列可以访问列。相反,选择单个行需要从每个块中选择适当的行然后形成新的系列并将数据从每个块的行复制到该系列中。因此,遍历DataFrame的行(实际上)并不像遍历列那样自然。
但是,如果需要迭代行,仍然可以通过调用
df.iterrows()
来实现,应该尽可能避免使用df.iterrows
,原因与使用它不自然的原因相同--它需要复制,这会使过程比迭代列慢。xmjla07d2#
在文档中有一个很好的解释-Pandas DataFrame的迭代应该是“类似于dict的”,所以迭代是在键(列)上进行的。
可以说,Series的迭代是在值上进行的,这有点令人困惑,但正如文档所指出的,这是因为它们更像“数组”。