2013-08-23 66 views
0

這是我寫的代碼。 'guteliste25.txt'包含一個數據表,其中包含指定列的名稱的標題。如何添加一列到具有特定dtype的2d數組?

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) 

它在最後一行吐出的錯誤是: 類型錯誤:預期可讀緩衝區對象

我想,這一定是有些問題,np.genfromtxt及其不同行的格式。

我只想一個價值共計一列添加到每一行,即,有一個名字爲它,這樣我可以很容易地通過訪問:CNS [「R」]

回答

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用於處理結構化陣列。

+0

嗨Ophion,謝謝你的回覆!這是正確的和有益的。 雖然我不能投票。 – user100352

相關問題