2013-04-29 129 views
1

說我有一維數組:充氣一維數組爲二維數組numpy的

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

在熊貓我想創建一個數據幀只有一行,並使用這個數組10列。例如:

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) 

我想這是因爲大熊貓需要一個二維數組,我有一個(平) 1D陣列。有沒有辦法將我的一維數組充氣到二維數組中或讓熊貓在創建數據框時使用一維數組?

注:我用熊貓的最新的穩定版本(0.11.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 
+0

謝謝@Rutger,你是對的。我現在糾正了它。我在複製代碼時犯了一個錯誤。 – 2013-04-29 15:23:35

1

單行,許多圓柱的數據幀是不尋常的。而更自然,地道的選擇將是你所謂的cols索引的系列:

pd.Series(my_array, index=cols) 

但是,要回答你的問題,數據幀的構造是假設my_array是10個數據點的列。嘗試DataFrame(my_array.reshape((1, 10)), columns=cols)。這對我行得通。

+0

'my_array.T'對1-D數組沒有影響。 – 2013-04-29 15:16:52

+0

轉置一維數組會得到相同的數組。您需要使用.reshape()重塑形狀,或者使用np.newaxis通過reindex添加索引。 – Paul 2013-04-29 15:17:03

+0

是的,我只是測試這個,並發現這一點。我會修改.... – 2013-04-29 15:20:51

2

這兩種應該這樣做:

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

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

通過使用替代數據幀的構造,可以無需重塑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