如何将数据框中的值存储在单个列表中

5
我有一个名为table的pandas数据框,想要将其中所有的单元格值存储在一个列表中:
table = pd.DataFrame({'col-1':[2,7,13,16,23,26,27,29], 'col-2':[541,3,0,15,329,525,6,28], 'col-3':[0,571,0,9,9,0,62,0]}, index=['row-1','row-2','row-3','row-4','row-5','row-6','row-7','row-8'])

最终输出应该是这样的:
my_list = [2,7,13,16,23,26,27,29,541,3,0,15,329,525,6,28,0,571,0,9,9,0,62,0]

如果你能教我完成这个任务最有效的方法,我将不胜感激。谢谢。

3个回答

4
为了获得更好的性能,使用了 numpy 方法 numpy.ravel 与转置数据一起使用:
import numpy as np

L = np.ravel(table.T).tolist()

使用 DataFrame.unstack 这个想法也是可以的,但如果数据框很大,则性能可能会变差:
L = table.unstack().tolist()

print (L)
[2, 7, 13, 16, 23, 26, 27, 29, 541, 3, 0, 15, 329, 525, 6, 28, 0, 571, 0, 9, 9, 0, 62, 0]

1
感谢jezrael提供的出色解决方案。它解决了这个问题。 - Farid

2
您可以使用以下方法:
my_list = table.T.values.flatten().tolist()

transpose .T 用于获得与您的示例相同的顺序。


感谢David与我分享这个方法。问题现在已经解决了。 - Farid

0
一种可能的解决方案是使用melt()函数:
my_list = table.melt()['value'].tolist()
print(my_list)

或者,你也可以尝试 @DavidK 答案的 to_numpy() 变体,这是 pandas 推荐的方法,也在这个 问题 中讨论过:

my_list = df.T.to_numpy().ravel().tolist()
print(my_list)

my_list = df.T.to_numpy().reshape(-1).tolist()
print(my_list)

无论哪种情况下都输出

[2, 7, 13, 16, 23, 26, 27, 29, 541, 3, 0, 15, 329, 525, 6, 28, 0, 571, 0, 9, 9, 0, 62, 0]

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