从NumPy数组创建Pandas数据框。

6
我可以创建一个pandas数据框架来自numpy:
columns = ['1','2']
data = np.array([[1,2] , [1,5] , [2,3]])
df_1 = pd.DataFrame(data,columns=columns)
df_1

如果我改用:
columns = ['1','2']
data = np.array([[1,2,2] , [1,5,3]])
df_1 = pd.DataFrame(data,columns=columns)
df_1

每个数组都是一列数据。但是这会引发错误:
ValueError: Wrong number of items passed 3, placement implies 2

这种数据格式在pandas中是否有支持,还是必须使用示例1中的格式?

答案非常简单。Numpy将数组存储为行向量(!),在错误的示例中,您正在传递具有3个值的两行,并且只有2列。而在第一个示例中,您正在传递具有2个值和2列的3行,这是有效的! - Anton vBR
3个回答

7
您需要转置您的numpy数组:
df_1 = pd.DataFrame(data.T, columns=columns)

为了理解这种必要性,考虑您的数组的形状:
print(data.shape)

(2, 3)

形状元组中的第二个数字,或者数组中的列数,必须等于您的数据框中的列数。

当我们转置数组时,数组的数据和形状会被转置,使其可以传递到具有两列的数据框中:

print(data.T.shape)

(3, 2)

print(data.T)

[[1 1]
 [2 5]
 [2 3]]

2
在第二种情况下,您可以使用:


df_1 = pd.DataFrame(dict(zip(columns, data)))

2
数据框(DataFrames)是从数组中本质上按照顺序创建的。
无论哪种方式,您都需要转置(transpose)一些内容。
一种选择是指定index=columns,然后转置整个内容。这将得到相同的输出结果。
 columns = ['1','2']
 data = np.array([[1,2,2] , [1,5,3]])
 df_1 = pd.DataFrame(data, index=columns).T
 df_1

如上所述,传入数据T也是完全可以接受的(假设数据是ndarray类型)。


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