将1D阵列膨胀为numpy中的2D阵列

时间:2013-04-29 15:09:07

标签: python numpy pandas

说我有一维数组:

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需要一个2D数组,而且我有一个(平面)1D数组。有没有办法将我的一维数组膨胀成二维数组,或让Panda在创建数据帧时使用一维数组?

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这些都应该这样做:

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

my_array2 = my_array.reshape((1,10)) 

答案 2 :(得分:1)

单行,多列的DataFrame很不寻常。一个更自然,惯用的选择将是一个以你所谓的cols索引的系列:

pd.Series(my_array, index=cols)

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

答案 3 :(得分: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