数组放入熊猫数据框列

时间:2020-09-26 20:04:28

标签: python arrays pandas numpy dataframe

我有一个输出数组的程序。

例如:

[[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]

我想用熊猫把这些数组变成一个数据框。但是,当我这样做时,这些值将变成这样的行值:

img

如您所见,整个数组中的每个数组都变成了自己的行。我希望整个数组中的每个数组都成为具有列名称的自己的列。

此外,在我的用例中,数组中的数组数是可变的。可能有4个数组或70个数组,这意味着可能有4个列或70个数组。当涉及到列名时,这是有问题的,我想知道在Python中是否有自动增加列名的方法。

在下面查看我的尝试,让我知道如何解决此问题。

我想要的结果只是简单地使整个数组中的每个数组变成其自己的列而不是行,并使该列的标题随着每个其他数组/列的增加而递增。

非常感谢您。

需要帮助。请回复!

frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]
numpy_data= np.array(frame)

df = pd.DataFrame(data=numpy_data, columns=["column1", "column2", "column3"])
print(frame)
print(df)

4 个答案:

答案 0 :(得分:2)

您可以transpose数组和add_prefix

frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]

pd.DataFrame(np.array(frame).T).add_prefix('column')

出局:

   column0  column1  column2  column3
0        0        0        1        2
1        1        0        3        4
2        0        0        3        4

可处理所有数量的数组

frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4], [1,0,1], [2,0,3]]

pd.DataFrame(np.array(frame).T).add_prefix('column')

出局:

   column0  column1  column2  column3  column4  column5
0        0        0        1        2        1        2
1        1        0        3        4        0        0
2        0        0        3        4        1        3

答案 1 :(得分:2)

可能的解决方案是transposing,然后将numpy数组转换为dataframe后重命名列。这是代码:

import numpy as np
import pandas as pd

frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]
numpy_data= np.array(frame)

#transposing later
df = pd.DataFrame(data=numpy_data).T 

#creating a list of columns using list comprehension without specifying number of columns
df.columns = [f'mycol{i}' for i in range(0,len(df.T))] 

print(df)

输出

   mycol0  mycol1  mycol2  mycol3
0       0       0       1       2
1       1       0       3       4
2       0       0       3       4

相同的11列代码

import numpy as np
import pandas as pd

frame = [[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4], [5, 2, 2], [6,7,8], [8,9,19] , [10,2,4], [2,6,5], [10,2,5], [11,2,9]]
numpy_data= np.array(frame)

df = pd.DataFrame(data=numpy_data).T
df.columns = [f'mycol{i}' for i in range(0,len(df.T))]

print(df)
   mycol0  mycol1  mycol2  mycol3  mycol4  mycol5  mycol6  mycol7  mycol8  mycol9  mycol10
0       0       0       1       2       5       6       8      10       2      10       11
1       1       0       3       4       2       7       9       2       6       2        2
2       0       0       3       4       2       8      19       4       5       5        9

答案 2 :(得分:1)

一种方法可能是,通过如下迭代列表中的每个项目,将其更改为具有列名的字典:

df = pd.DataFrame({'column{}'.format(index):i for index, i in enumerate(frame)})

或者,其他方式可能是对已经拥有的东西使用transpose。对于列名,您可以在创建数据框时排除,以后再添加(不确定是否需要 numpy):

df = pd.DataFrame(data=frame)


df = df.T # transposing
df.columns = ['column{}'.format(i+1) for i in df.columns] # adding column names

结果(两种方式):

    column1 column2 column3 column4
0   0          0      1        2
1   1          0      3        4
2   0          0      3        4

答案 3 :(得分:1)

让我们尝试

pd.DataFrame(dict(zip(range(len(frame)), frame)))
   0  1  2  3
0  0  0  1  2
1  1  0  3  4
2  0  0  3  4