将pandas DataFrame转换为列表的列表

79

我有一个像这样的pandas数据框:

admit   gpa  gre  rank   
0  3.61  380     3  
1  3.67  660     3  
1  3.19  640     4  
0  2.93  520     4

现在我想要得到一个 Pandas 数据框中的行列表,例如:

[[0,3.61,380,3], [1,3.67,660,3], [1,3.19,640,4], [0,2.93,520,4]]   

我该怎么做?

3个回答

132

有一个内置的方法是最快的方法,它在.values np数组上调用tolist

df.values.tolist()

[[0.0, 3.61, 380.0, 3.0],
 [1.0, 3.67, 660.0, 3.0],
 [1.0, 3.19, 640.0, 4.0],
 [0.0, 2.93, 520.0, 4.0]]

31

你可以这样做:

map(list, df.values)

3
我会对这个答案添加一些警告。在Python 3中,map()返回一个迭代器,因此回答变为list(map(list, df.values)),这是一种过度设计,因为存在更短的拼写df.values.tolist()。(另一个需要注意的事情是,截至pandas 0.24.0(2018年1月),他们建议将df.values拼写为df.to_numpy(),所以我认为它变成了df.to_numpy().tolist()。它的优点是明确表明df.values给出一个未包装的 numpy 对象,而 .tolist() 应该在 numpy 文档中查找。) - Steven Rumbalski

12

编辑:自0.23.0版本起,as_matrix已被弃用。

您可以在数据框架上使用内置的valuesto_numpy方法(推荐选项):

In [8]:
df.to_numpy()

Out[8]:
array([[  0.9,   7. ,   5.2, ...,  13.3,  13.5,   8.9],
   [  0.9,   7. ,   5.2, ...,  13.3,  13.5,   8.9],
   [  0.8,   6.1,   5.4, ...,  15.9,  14.4,   8.6],
   ..., 
   [  0.2,   1.3,   2.3, ...,  16.1,  16.1,  10.8],
   [  0.2,   1.3,   2.4, ...,  16.5,  15.9,  11.4],
   [  0.2,   1.3,   2.4, ...,  16.5,  15.9,  11.4]])

如果您明确要求列表而不是NumPy数组,则添加.tolist()

df.to_numpy().tolist()

1
请注意,问题要求一个列表的列表,因此如果多维数组不够好,可以在末尾添加.tolist()来完成它。df.to_numpy().tolist() - Steven Rumbalski

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