Python熊猫|为每个列创建单独的列表

时间:2018-07-26 00:57:16

标签: python list pandas dataframe tolist

我不确定如何使用清单来实现以下目标。我有一个这样的数据框:

Param_1     Param_2     Param_3
-0.171321   0.0118587   -0.148752
1.93377     0.011752    1.9707
4.10144     0.0112963   4.06861
6.25064     0.0103071   5.83927

我想要为每个列创建单独的列表,列表名称是列标签。

我不想继续这样做:

Param_1 = df["Param_1"].values.tolist()

请告诉我是否有办法。谢谢。

3 个答案:

答案 0 :(得分:3)

添加.T

df.values.T.tolist()
Out[465]: 
[[-0.171321, 1.93377, 4.10144, 6.25064],
 [0.0118587, 0.011752, 0.011296299999999999, 0.0103071],
 [-0.148752, 1.9707, 4.06861, 5.83927]]

或者我们可以创建dict

{x:df[x].tolist() for x in df.columns}
Out[489]: 
{'Param_1': [-0.171321, 1.93377, 4.10144, 6.25064],
 'Param_2': [0.0118587, 0.011752, 0.011296299999999999, 0.0103071],
 'Param_3': [-0.148752, 1.9707, 4.06861, 5.83927]}

或使用locals(不建议使用,但看起来像您所需要的)

variables = locals()
for key in df.columns:
    variables["{0}".format(key)]= df[key].tolist()
Param_1
Out[501]: [-0.171321, 1.93377, 4.10144, 6.25064]

答案 1 :(得分:2)

也可以agg

>>> df.agg(tuple)

Param_1               (-0.171321, 1.93377, 4.10144, 6.25064)
Param_2    (0.0118587, 0.011752, 0.011296299999999999, 0....
Param_3                (-0.148752, 1.9707, 4.06861, 5.83927)
dtype: object

如果确实需要lists

df.agg(tuple).transform(list)

答案 2 :(得分:1)

如果您想要dictionary以列名作为键,则可以尝试:

result = df.to_dict(orient='list')
# result will be: 
# {'Param_2': [0.0118587, 0.011752, 0.011296299999999999, 0.0103071], 
#  'Param_1': [-0.171321, 1.93377, 4.10144, 6.25064], 
#  'Param_3': [-0.148752, 1.9707, 4.06861, 5.83927]}

您还可以使用as_matrix来返回numpy ndarray,如下所示:

result = df.as_matrix().T
# result will be:
# [[-0.171321   1.93377    4.10144    6.25064  ]
#  [ 0.0118587  0.011752   0.0112963  0.0103071]
#  [-0.148752   1.9707     4.06861    5.83927  ]]

要从list获得ndarray

result = df.as_matrix().T.tolist()
相关问题