2014-07-25 148 views
1

我正在嘗試創建大量數據,這些數組對應於大數據框中每列的數據值,並且我希望每個數組共享相同的名稱作爲其相應的專欄。下面是我如何試圖接近這樣一個例子:按列名爲數據框的每一列創建一個數組

x = [a b c] <- column names 
    [1 2 3] 
    [1 2 3] 

names = [a b c]

For i in names:

i = numpy.array(x[i]) 

我想創建三個數組(A,B和C):

a = [1, 1] 
b = [2, 2] 
c = [3, 3] 

但是我得到的是一個數組:

i = [3, 3] 

如何解決此問題?

回答

1

每次在for循環中,您都會爲同一個變量分配一個不同的值,因此當循環結束時,您將剩下最後一個賦值。

我建議你創建一本字典,並使用每個名稱爲鍵和數組值:

arrays = {} 
for i in names: 
    arrays[i] = numpy.array(x[i]) 

然後你可以檢索每個陣列:

arrays[name] 
1

有了您的迭代,會發生以下情況:

i = 'a' 
i = np.array([1, 1]) 
i = 'b' 
i = np.array([2, 2]) 
i = 'c' 
i = np.array([3, 3]) 

然後當你print i,你只能用你的最後一步迭代i設定離開。你可能想是這樣的:

import pandas as pd 
df = pd.DataFrame({'a':[1,1], 'b':[2,2], 'c':[3,3]}) 
a, b, c = [np.array(df[i]) for i in df.columns] 

然後你得到

print a 
#array([1, 1]) 
print b 
#array([2, 2]) 
print c 
#array([3, 3]) 

如果你不知道列名事先,你可以創建一個字典,其中每個鍵 - 值對的字典將是namearray。要做到這一點最簡單的方法是

arrays = dict(df.iteritems()) 

,或者如果你不希望指數:

arrays = dict(zip(df.columns, df.as_matrix().T)) 

然後你就可以通過名稱檢索陣列做arrays['a']。但是,我不確定爲什麼要通過調用df.adf['a']來獲得接近相同的功能。

1

只使用NumPy的,您可以使用結構化陣列:

test = np.array([(1,2,3), (1,2,3), (1,2,3)], dtype=[('a', float), ('b', float), ('c', float)]) 

這樣:

print(test['a']) 
#array([ 1., 1., 1.]) 
相關問題