【问题标题】:Extracting data as a list from a Pandas dataframe while preserving order从 Pandas 数据框中提取数据作为列表,同时保留顺序
【发布时间】:2019-03-16 19:05:03
【问题描述】:

假设我有一些 Pandas 数据框 df,其中有一个名为“HEIGHT”的列,以及许多其他列。

如果我发出list(df["HEIGHT"]),那么这将按照它们在数据框中的确切顺序,即按数据框的索引排序,为我提供该列中项目的列表。

总是这样吗? df["HEIGHT"] 命令将返回一个系列,list() 将其转换为列表。但是这些操作是否总是保序的?有趣的是,在 Pandas 作者(!)的 [book1] 中,从我目前的阅读来看,我不清楚这些基本操作何时保持秩序;秩序可能总是保持不变,还是有一些简单的规则可以知道什么时候应该保持秩序?

【问题讨论】:

  • 你试过df['HEIGHT'].tolist()吗?

标签: pandas python-3.6


【解决方案1】:

pandas 系列中元素的顺序(即 pandas DataFrame 中的一列)不会改变,除非你做一些事情让它改变。并且 python list 的顺序保证反映插入顺序 (SO thread)。

所以是的,df[0].tolist()(比list(df[0]) 稍微快一点)应该始终生成一个 Python 元素列表,其顺序与 df[0] 中的元素顺序相同。

【讨论】:

  • 接受您的回答是因为tolist 更快的好消息。为什么 - 因为它不是 Python 内置函数,而是 pandas DataFrame 类的专用函数?
  • @l7ll7 是的,一般来说,在使用 pandas 或 numpy 等数据结构库时,您应该使用它们的接口而不是 python 等价物以获得更好的性能。
【解决方案2】:

订单将始终保留。当您使用list 函数时,您为其提供了一个迭代器,并通过对其进行迭代来构造一个列表。有关迭代器的更多信息,您可能需要阅读 PEP 234 on iterators。

迭代顺序由您提供的迭代器决定。系列的迭代器由pd.Series.__iter__() 提供(访问对象迭代器的标准方法,通过list 方法和类似方法搜索)。有关 Pandas 中的迭代和索引的更多信息,请考虑阅读 relevant API reference section 和更深入的 indexing documentation

【讨论】:

  • +1 关于迭代器的超级原始解释。我会接受这两个答案,但由于我不能,我也礼貌地对你的其他一些答案进行了投票;)
猜你喜欢
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2021-01-07
相关资源
最近更新 更多