如何将pandas DataFrame的列转换为列表的列表?

36

我有一个包含多列的pandas数据框。

2u    2s    4r     4n     4m   7h   7v
0     1     1      0      0     0    1
0     1     0      1      0     0    1
1     0     0      1      0     1    0
1     0     0      0      1     1    0
1     0     1      0      0     1    0
0     1     1      0      0     0    1

我想要做的是将这个 pandas.DataFrame 转换为以下形式的列表。
X = [
     [0, 0, 1, 1, 1, 0],
     [1, 1, 0, 0, 0, 1],
     [1, 0, 0, 0, 1, 1],
     [0, 1, 1, 0, 0, 0],
     [0, 0, 0, 1, 0, 0],
     [0, 0, 1, 1, 1, 0],
     [1, 1, 0, 0, 0, 1]
    ]

2u 2s 4r 4n 4m 7h 7v 是列标题。在不同的情况下会有所变化,所以不必担心。


对于未来遇到这个问题的任何人:如果你的数据类似于原帖中的均质网格/数组结构,那么 Pandas DataFrame 可能不是正确的数据结构选择。NumPy 数组可能更合适,甚至只需使用普通的 Python 列表即可。 - AMC
1
这个回答解决了你的问题吗?将Pandas DataFrame转换为列表的列表 - AMC
2个回答

73

它看起来像是一个转置矩阵:

df.values.T.tolist()

[list(l) for l in zip(*df.values)]

[[0, 0, 1, 1, 1, 0],
 [1, 1, 0, 0, 0, 1],
 [1, 0, 0, 0, 1, 1],
 [0, 1, 1, 0, 0, 0],
 [0, 0, 0, 1, 0, 0],
 [0, 0, 1, 1, 1, 0],
 [1, 1, 0, 0, 0, 1]]

34
这将返回一个列表的列表。list(df.values.flatten())可以完成此任务。 - pms
2
@pms 从OP所需的输出来看,确实是想要创建一个列表的列表。但你可能可以将你的评论转换为答案,因为它可能会被一些愚蠢的标记删除。此外,我个人认为你的评论非常有用,因为我正在寻找单个列表选项。最后,这可能可以修改为list(df.values.T.flatten()),这样值就会按列保留。 - David Arenburg
@pms,非常好。你也可以通过df.values.flatten().tolist()获取一个列表。注意:无论您想要一个列表还是想要避免一个列表的列表,Google都会将您带到这里:我想避免一个列表的列表,.flatten()就是方法。 - PatrickT

2

使用tolist()函数将Dataframe转换成列表。例如,假设我有一个名为df的Dataframe。

要将其转换为列表,只需简单地使用tolist()函数。

df.values.tolist()

您可以使用以下方法将特定列更改为列表:
df['column name'].values.tolist()

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