说我有一维数组:
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)
答案 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