2016-11-30 4 views
1

大文字の.csvを約20MBのように読まなければならない。これらのファイルは、8の列と5198の行で構成されるテーブルです。私は特定の列にいくつかの統計を行う必要がありますIPython:大きな.csvファイルを読むには最適な方法ですか?

私はn異なるファイルを持っており、これは私が何をやっている:

stat = np.arange(n) 
    I = 0 
    for k in stat: 
     df = pd.read_csv(pathS+'run_TestRandom_%d.csv'%k, sep=' ') 
     I+=df['I'] 
    I = I/k ## Average 

をこのプロセスは0.65sを取り、最速の方法がある場合、私は思って。

+0

多分 'memory.map = True'を' pd.read_csv'で指定しようとします –

+0

- データが排他的に数値であるなら、** csv **モジュールを使う必要はありません。 ** split **を使用することができます。 - レコードフィールドにアクセスするために辞書を使用するための若干のオーバーヘッドがあります。代わりに、csvのヘッダーで** find **を使用して、そのインデックスを使用して分割レコードから項目を取得することができます。 –

+0

最初の行は数値ではありませんが、 'split'を使用することは可能ですか? – emax

答えて

-2

編集:明らかにこれは本当に悪い方法です!私が推測したことをしないでください:/

私は同じサイズのデータ​​セットで今でも同様の問題に取り組んでいます。私が使用している方法は、私のシステムでは内.1sec約それ倍numpyののgenfromtxt

import numpy as np 

ary2d = np.genfromtxt('yourfile.csv', delimiter=',', skip_header=1, 
    skip_footer=0, names=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8']) 

ある

これに伴う1つの問題は、非数値である任意の値は、単にnanにより置換されていることですこれはあなたが望むものではないかもしれません

+0

['genfromtxt'は' read_csv'よりも遅いです(http://stackoverflow.com/q/21486963/364696)、実際には本当のCSVをサポートしていないことを考えると( '、'の区切り文字は同じではありません引用、エスケープなどをカバーする適切なCSVとしてのもの)、私はこれがどのように役立つか分かりません。 'read_csv'はCSVを正しく行い、' genfromtxt'が間違っていて一般的な目的(read:特殊なコードよりも遅いと思われる)のCSVに最適化されているので、 'genfromtxt'は間違った方法です。 – ShadowRanger

関連する問題