Python Pandas如何将数据框展平为列表?

80

我的数据框长这样:

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])

我希望将数据框扁平化为一个连续的列表,如下所示:

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

我可以遍历行并使用extend添加到一个列表中,但是否有更简单的方法?


可能是压平序列的理解?的重复问题。 - hlt
5
在寻找答案时,我看过了上面那个回答。那个问题并不是一个数据框设置问题。如果那个答案解决了我的问题,我就不需要发帖问问题了。 - jason
5个回答

130
你可以在转换为NumPy数组的DataFrame上使用.flatten()(参考文档)
df.to_numpy().flatten()

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

编辑

在Pandas的早期版本中,使用values属性代替.to_numpy()方法,如下面的评论中所提到的。


16
Pandas现在推荐使用.to_numpy()代替.values - Frank
1
@Frank 为什么?.values已经存在,它是在底层使用的numpy数组。为什么要调用一个函数呢? - endolith
1
@endolith,我只是转述文档上的内容,请向他们咨询,而不是问我。这里有更多的背景信息:https://stackoverflow.com/a/54508052 - undefined
@endolith 我只是转达文档上写的内容 - 问他们,不要问我。这里有更多上下文:https://dev59.com/tGYs5IYBdhLWcg3wDPit#54508052 - Frank

19

也许可以使用stack

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

(编辑: 顺便提一下,问题中使用的DF将第一行作为标签,这就是为什么它们在此处没有输出的原因。)


4
你可以尝试使用Numpy。
import numpy as np
np.reshape(df.values, (1,df.shape[0]*df.shape[1]))

3

您可以使用reshape方法。

df.values.reshape(-1)

嗨,Ahmed,你可以通过格式化代码、放置官方文档链接以及最后写出使用你的答案得到的输出来改进你的回答。 - Carmoreno

0
先前提到的 df.values.flatten().tolist()df.to_numpy().flatten().tolist() 简洁而有效,但我花了很长时间学习如何通过列表推导自己完成工作,而不是依赖内置函数。
对于其他有兴趣的人,请尝试: [ row for col in df for row in df[col] ] 结果证明,这种通过列表推导来展开 df 的解决方案(在 Stack Overflow 上没有找到其他地方)只是对展开嵌套列表的解决方案进行了小修改(可以在 Stack Overflow 上找到): [ val for sublst in lst for val in sublst ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接