2016-06-01 4 views
2

私は現在、約350行と50列のcsvファイルを持っています。そのうちの4列にアクセスしたいと思っています。 genfromtxtを使用して、私はこれを行うことができます。ただし、これらの列を取得した後は、既存の列(つまり、newcol=abs(col1-col2))に基づいて新しい列を追加したいと考えています。しかし、私がこれを行うと、エラー:too many indices for arrayが出ます。ここでnumpyの配列を操作する

私のコードです:

上記の最後の2行に基づいて
import numpy as np 
thedata = np.genfromtxt(
    'match_roughgraphs.csv', 
    skip_header=0, 
    skip_footer=0, 
    delimiter=',', 
    usecols=(3,4,29,30), 
    names=['hubblera','hubbledec','sloanra','sloandec']) 

for row in thedata: 
    print(row) 

b=np.empty(350,1) 
b=np.absolute(thedata[:,0]-thedata[:,1]) #returns too many indices error 

print(thedata[0,0]) #also returns too many indices error 

print(thedata[0]) #prints out first row 

、私が試したテスト、私は分離、すべてのデータが1列に保存されるようにgenfromtxt()は、csvファイルをロードしていると仮定していますデリミタカンマの代わりに文字列コンマで区切ります。どのようにこれを修正するための任意の提案?

答えて

2

あなたのコードがうまくいかない理由は、numpy.genfromtxtがタプルまたはより具体的に構造化されたndarrayの1D配列を返すということだと思います。これを読んでnumpy.genfromtxt produces array of what looks like tuples, not a 2D array—why? 引数を修正するか、それらのタプルを配列に変換してthedataを2次元配列として得ることができます。 name引数を使用すると、構造化ndarrayが返され、この引数が削除され、2次元配列が返されます。 あなたがここに列を命名しているとして、あなただけのthedata[0,0]

b=np.absolute(thedata['hubblera']-thedata['hubbledec']) 

を行うことができます何の2D配列は、私がいるのを見ましたthedata[0][0]

+0

をやってみないがあるので、これはエラーを返しますが、答えは問題がndarraysということだったということです2Dであるためには均質でなければならない。私のものはすでに同質である。すべてのデータポイントは '

+0

name引数を使用すると、構造化されたndarrayが返され、names引数を取り除くと2d配列が返されます – Eular

+0

右よ!ありがとうございます –

関連する問題