2012-02-20 25 views
2

私はPythonに変換しています。IDLのnumpy(Matlabのようなもの)です。これはちょっとしたデータ処理に関する疑問です。たぶん誰かが助けることができます。最高のデータ構造:辞書の配列、オブジェクトの配列?

私のデータの通常の状況は、私はおそらくスプレッドシート、データベースなどから固定データクラスを持っているということです。私は、どのような種類のデータ構造がPythonとNumpyで使用するのが最善かを理解しようとしています。

私はcsvモジュールについて知っていて、csv.DictReader()を使ってスプレッドシートを読むことができます。これは行ごとに読み込まれ、スプレッドシートのヘッダー(最初の行)から適切な名前の辞書になります。

f=open(file,'rU') 
dat = csv.DictReader(f) 
i=0 
data=[] # makes an empty list 
i=0 
for row in dat: 
    data.append(row) 
    if i == 0 : 
     keys=row.keys() 
     print "keys" 
     print keys 
     print 
    i=i+1 

f.close() 

まず第一に、それはちょっと辞書やキーのキーのリストにcsvファイルを読み込むためのコードがたくさんあります。より速く/より良い方法がありますか?

今、私は辞書の配列が本当に私が望むものかどうか疑問に思います。私はオブジェクトのクラスを作成し、これをオブジェクトの配列にする必要がありますか?または、他の何か?

私は辞書、「データ」の私の配列を持っている場合、私は 年齢のようないくつかの「列」を得るでしょう=配列([データ内のdatのためのdat [「年齢」]])

がその権利ですそれを行う方法?より速く行う「年齢=データ→年齢」のような方法はありませんか?

ガイダンスに感謝します。ありがとう。

data = list(csv.DictReader(open(file, 'rU'))) 
print "keys", data[0].keys() 
+0

辞書のリストではなく、辞書のリストがあります。普通の配列や再配列が必要なようです。 numpy.loadtxtまたはcsv.readerを見てください。 –

答えて

0

の配列で行く

+0

クール。しかし、ファイルを閉じる必要がありますか、またはファイルハンドルがない場合は自動的に閉じますか? – Dave31415

+1

@ Dave31415:このファイルは、常にthe_file: 'としてopen(file、 'rU')とともに使用してください。あなたの 'dat = csv.DictReader(the_file)'をインデントし、残りのすべてを 'with'の中に入れます。ファイルが閉じられることが保証されます。 –

+1

John Zのメソッドは、openを含む行が実行されるとファイルを閉じます。より一般的には、ファイルオブジェクトへの参照がなくなったとき(またはwithブロックの終わりか、f.close()を呼び出すとき)にファイルが閉じます。 –

0

は、OKですデータがたくさんあるので、私はこの種のもののために設計されたPythonパッケージpandasを使うことを強くお勧めします。あなただけの操作を行います。あなたの空想のインデックスのすべてのソートを行いDataFrameを与える、といいと速いです

pandas.read_csv(file) 

+0

csvファイルからクラスを自動的に作成する簡単な方法はありますか?コードを記述して手動でビルドする必要がありますか? – Dave31415

+0

あなたはチェックアウトしましたか:http://docs.python.org/library/csv.html –

5

スプレッドシート型で作業している場合:あなたのコードは簡単に、より簡潔に行うことができますが、私はいつもそれをあなたが道をやってオブジェクト

+0

これはnumpyとうまくやり取りするのですか、それとも別のものになるはずですか? – Dave31415

+1

これはnumpyの上に構築されているので、一緒にとてもうまく動作します。 –

2

明示的numpyのを使用して言及するか、次のようなものを検討してみる:

import numpy as np 
data = np.genfromtxt('data.txt', delimiter=',', names=True) 
print data['item1'] 

それとも

import numpy as np 
item1, item2, item3 = np.loadtxt('data.txt', delimiter=',', skiprows=1).T 

data.txtの形式は、これらの線に沿って何かある

は(つまりカンマ区切り)を。第二は、わずか3つの変数にカラム(従って転置( .T))を開梱しながら

item1, item2, item3 
1.0, 2.0, 3.0 
4.0, 5.0, 6.0 
7.0, 8.0, 9.0 

最初の例では、構造化された配列を使用します。