我有一个输出数组的程序。
例如:
[[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]
我想用熊猫把这些数组变成一个数据框。但是,当我这样做时,这些值将变成这样的行值:
如您所见,整个数组中的每个数组都变成了自己的行。我希望整个数组中的每个数组都成为具有列名称的自己的列。
此外,在我的用例中,数组中的数组数是可变的。可能有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)
答案 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