2014-07-25 150 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.]) 
相关问题