将数组转换为Pandas数据框列

7
我有一个输出数组的程序。
例如:
[[0, 1, 0], [0, 0, 0], [1, 3, 3], [2, 4, 4]]

我想使用pandas将这些数组转换为数据框。但是,当我这样做时,值变成了行值,如下所示:

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个回答

4
一种可能的解决方案是在将 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
你可以将数组进行转置并添加前缀。
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

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

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

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

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