如何将列添加到具有特定dtype的二维数组?

时间:2013-08-23 08:29:45

标签: python numpy

这是我写的代码。 'guteliste25.txt'包含一个带有标题的数据表,其中指定了列的名称。

import numpy as np
d = 'guteliste25.txt'
CNS = np.genfromtxt(d, dtype = None, names = True)

dt = np.dtype([('R','<f8')])
test = np.ones(len(CNS),dtype=dt)
klaus = np.concatenate((CNS,test), axis=1)

它在最后一行吐出的错误是: TypeError:期望一个可读的缓冲区对象

我认为np.genfromtxt和它的不同行格式一定存在问题。

我只想为每一行添加一个值,即总共一列,并为其命名,以便我可以通过以下方式轻松访问:CNS ['R']

1 个答案:

答案 0 :(得分:0)

最好从头开始创建一个结构化数组并填充它:

这两个例子以:

开头
import numpy as np
from numpy.lib import recfunctions

ints = np.ones(5,dtype=np.int)
floats = np.ones(5,dtype=np.float)
strings = np.array(['A']*5)

创建一个空的结构化数组,然后用值填充它:

out=np.empty(5,dtype=[('ints', '>i4'), ('floats', '>f8'), ('strings', '|S4')])

out['ints']=ints
out['floats']=floats
out['strings']=strings

print out
[(1, 1.0, 'A') (1, 1.0, 'A') (1, 1.0, 'A') (1, 1.0, 'A') (1, 1.0, 'A')]

print out.dtype
[('ints', '>i4'), ('floats', '>f8'), ('strings', 'S4')]

将数据附加到当前数组:

out=np.lib.recfunctions.append_fields(ints,['floats','strings'],[floats,strings])

print out
[(1, 1.0, 'A') (1, 1.0, 'A') (1, 1.0, 'A') (1, 1.0, 'A') (1, 1.0, 'A')]

print out.dtype #note the name applied to the first array
[('f0', '>i4'), ('floats', '>f8'), ('strings', 'S4')]

我强烈建议python pandas处理结构化数组。