【问题标题】:python pandas flatten a dataframe to a listpython pandas将数据框展平为列表
【发布时间】:2014-10-15 21:27:29
【问题描述】:

我有一个像这样的 df:

import pandas
a=[['1/2/2014', 'a', '6', 'z1'], 
   ['1/2/2014', 'a', '3', 'z1'], 
   ['1/3/2014', 'c', '1', 'x3'],
   ]
df = pandas.DataFrame.from_records(a[1:],columns=a[0])

我想将 df 展平,使其成为一个连续列表,如下所示:

['1/2/2014', 'a', '6', 'z1', '1/2/2014', 'a', '3', 'z1','1/3/2014', 'c', '1', 'x3']

我可以将行和extend 循环到一个列表,但是这样做更简单吗?

【问题讨论】:

标签: python list numpy pandas dataframe


【解决方案1】:

您可以在转换为 NumPy 数组的 DataFrame 上使用.flatten()

df.to_numpy().flatten()

如果您希望结果为 Python list,也可以添加 .tolist()

编辑

在以前的 Pandas 版本中,使用 values 属性而不是 .to_numpy() 方法,如下面的 cmets 所述。

【讨论】:

  • 熊猫现在 recommends 使用 .to_numpy() 而不是 .values
【解决方案2】:

也许使用stack

df.stack().values
array(['1/2/2014', 'a', '3', 'z1', '1/3/2014', 'c', '1', 'x3'], dtype=object)

编辑:顺便说一句,Q 中的 DF 使用第一行作为标签,这就是为什么它们不在此处的输出中。)

【讨论】:

    【解决方案3】:

    你可以试试 numpy

    import numpy as np
    np.reshape(df.values, (1,df.shape[0]*df.shape[1]))
    

    【讨论】:

      【解决方案4】:

      你可以使用reshape方法

      df.values.reshape(-1)
      

      【讨论】:

      • 嗨,ahmed,您可以改进您的答案,格式化您的代码,放置官方文档的链接,最后使用您的答案编写输出。
      【解决方案5】:

      前面提到的df.values.flatten().tolist()df.to_numpy().flatten().tolist() 简洁有效,但我花了很长时间尝试学习如何通过列表理解“自己完成工作”,而不使用内置函数。

      有兴趣的可以试试:

      [ row for col in df for row in df[col] ]

      事实证明,这种通过列表理解(我在 SO 的其他地方没有找到)扁平化 df 的解决方案只是对扁平化嵌套列表的解决方案的一个小修改(可以在整个 SO 中找到):

      [ val for sublst in lst for val in sublst ]

      【讨论】:

        猜你喜欢
        • 2021-04-02
        • 2020-09-27
        • 2018-11-09
        • 1970-01-01
        • 2019-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多