【问题标题】:Why Does Pandas Convert One Row (or Column) of a DataFrame to a Series?为什么 Pandas 将 DataFrame 的一行(或一列)转换为一个系列?
【发布时间】:2021-07-27 23:45:41
【问题描述】:

上下文:我将我认为是 DataFrame df.iloc[n] 的内容传递给函数。感谢dialogue here,我发现这是导致错误的原因,因为 Pandas 会自动将数据帧中的单行或列转换为系列,并且可以通过使用 df.iloc[[n]] 而不是 df.iloc[n] 轻松解决。

问题:我的问题是为什么Pandas 会这样做?使用 Series 而不是 DataFrames 是否有一些性能优势?这种自动转换为系列的原因是什么?

【问题讨论】:

  • 这就像问为什么索引二维数组会将其转换为一维数组。它不会将其转换为系列,数据框的行在逻辑上是系列,而不是数据框。从技术上讲,这是df.iloc[n](c,)df.iloc[[n]](1, c) 形状之间的区别,其中c 是多个列。
  • 我认为你说的不太对:type(df.iloc[n]) 是一个系列,而type(df.iloc[[n]]) 是一个数据帧。这不仅仅是维度:我可以调用df.iloc[[n]].columns,而df.iloc[n].columns 会引发错误。这里有真正的功能变化,而不仅仅是维度变化。我的问题是为什么 Pandas 会努力改变这个功能?这一定是有原因的。那是什么原因?谢谢!

标签: python pandas performance


【解决方案1】:

根据 Pandas 文档Why more than one data structure?

考虑 pandas 数据结构的最佳方式是将其作为低维数据的灵活容器。例如,DataFrame 是 Series 的容器,Series 是标量的容器。我们希望能够以类似字典的方式在这些容器中插入和删除对象。

因此,这里没有发生转换,而是检索具有不同属性/方法的对象。

【讨论】:

  • 这很完美,谢谢:“...正在检索具有不同属性/方法的对象”正是我需要的洞察力。
猜你喜欢
  • 2015-08-08
  • 2018-02-02
  • 2018-04-18
  • 2014-12-06
  • 2023-03-02
  • 2019-11-28
  • 2020-03-04
  • 2019-08-15
相关资源
最近更新 更多