1

假设我有一个一维数组:

import numpy as np
my_array = np.arange(0,10)
my_array.shape
(10, )

在 Pandas 中,我想10使用这个数组创建一个只有一行和一列的 DataFrame。例如:

import pandas as pd
import random, string
# Random list of characters to be used as columns
cols = [random.choice(string.ascii_uppercase) for x in range(10)]

但是当我尝试时:

pd.DataFrame(my_array, columns = cols)

我得到:

ValueError: Shape of passed values is (1,10), indices imply (10,10)

我认为这是因为 Pandas 需要一个二维数组,而我有一个(平面)一维数组。有没有办法将我的 1D 数组膨胀为 2D 数组,或者让 Panda 在创建数据框时使用 1D 数组?

注意:我使用的是最新的稳定版 Pandas (0.11.0)

4

4 回答 4

3

您的值数组的长度为 9,(值从 1 到 9),您的cols列表长度为 10。

我不明白你的错误信息,根据你的代码,我得到:

ValueError: Shape of passed values is (1, 9), indices imply (10, 9)

这是有道理的。

尝试:

my_array = np.arange(10).reshape(1,10)

cols = [random.choice(string.ascii_uppercase) for x in range(10)]

pd.DataFrame(my_array, columns=cols)

结果是:

   F  H  L  N  M  X  B  R  S  N
0  0  1  2  3  4  5  6  7  8  9
于 2013-04-29T15:19:11.567 回答
2

这些都应该这样做:

my_array2 = my_array[None] # same as myarray2 = my_array[numpy.newaxis]

或者

my_array2 = my_array.reshape((1,10)) 
于 2013-04-29T15:18:23.270 回答
1

单行、多列的 DataFrame 是不寻常的。一个更自然、更惯用的选择是由你所谓的 cols 索引的 Series:

pd.Series(my_array, index=cols)

但是,为了回答您的问题,DataFrame 构造函数假设 my_array 是一列 10 个数据点。试试DataFrame(my_array.reshape((1, 10)), columns=cols)。这对我行得通。

于 2013-04-29T15:15:12.347 回答
1

通过使用备用 DataFrame 构造函数之一,可以创建 DataFrame 而无需重塑 my_array。

import numpy as np
import pandas as pd
import random, string
my_array = np.arange(0,10)
cols = [random.choice(string.ascii_uppercase) for x in range(10)]
pd.DataFrame.from_records([my_array], columns=cols)

Out[22]: 
   H  H  P  Q  C  A  G  N  T  W
0  0  1  2  3  4  5  6  7  8  9
于 2013-04-29T18:40:31.670 回答