【问题标题】:Why does Pandas iterate over DataFrame columns by default?为什么 Pandas 默认会遍历 DataFrame 列?
【发布时间】:2019-03-09 23:50:57
【问题描述】:

试图了解 Pandas 某些功能背后的设计原理。

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

len(frame)

是 3560,但是

len([a for a in frame])

18 岁。

也许这对来自 R 的人来说很自然;对我来说,感觉不是很“Pythonic”。是否在某处介绍了 Pandas 的基本设计原理?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    DataFrame 主要是基于列的数据结构。 在底层,DataFrame 中的数据存储在块中。粗略地说,每个 dtype 都有一个块。 每一列都有一个数据类型。因此,可以通过从单个块中选择适当的列来访问列。相反,选择单行需要从每个块中选择适当的行,然后形成一个新的系列并将每个块的行中的数据复制到系列中。 因此,遍历 DataFrame 的行(在底层)不像遍历列那样自然。

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

    【讨论】:

      【解决方案2】:

      docs 中有一个不错的解释——Pandas DataFrames 的迭代意味着“类似字典”,所以迭代是在键(列)上。

      可以说,Series 的迭代超过值有点令人困惑,但正如文档所述,这是因为它们更像“数组”。

      【讨论】:

        猜你喜欢
        • 2021-04-04
        • 2018-12-28
        • 2023-03-24
        • 2013-04-05
        • 2019-11-14
        • 2014-10-17
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多