2016-05-11 17 views
1

私は大きなテキストファイルを半分の列で区切っています。私は列の値(たとえば2番目の列)を取得し、numpyを使って反復的に処理しようとしています。テキストファイルに含まれるデータの一例を以下に示す:Python Pandasを使用してチャンク内のデータにアクセスする

10862;2;1;1;0;0;0;3571;0; 
10868;2;1;1;1;0;0;3571;0; 
10875;2;1;1;1;0;0;3571;0; 
10883;2;1;1;1;0;0;3571;0; 
... 
11565;2;1;1;1;0;0;3571;0; 
11572;2;1;1;1;0;0;3571;0; 
11579;2;1;1;1;0;0;3571;0; 
11598;2;1;1;1;0;0;3571;0; 
11606;2;1;1; 

最後の行は、以前のものと同じ数の値が含まれていない場合がありますのでご了承ください。

この大きなファイルをチャンクで読み取るためにpandas.read_csvを使用しようとしています。

1) 設定nrows、全体を読みするように繰り返しskiprowsを増やす:例の目的のために、私がこれまでに2つの異なるアプローチを試みているのは、チャンクサイズは40

であると仮定しましょうチャンクでファイル。

nrows_set = 40 
n_it = 0 
while(1): 
    df = pd.read_csv(filename, nrows=nrows_set , sep=';',skiprows = n_it * nrows_set) 
    vect2 = df[1] # trying to access the values of the second column -- works 
    n_it = n_it+1 

発行ファイルの最後にアクセス:ものは、ファイルに含まれる行数より大きな行の数を読み取ろうとするときパンダがエラーを生成します。 たとえば、ファイルに20行があり、nrowsが40に設定されている場合、ファイルを読み取ることはできません。私の最初のアプローチは、私がファイルの最後の40行を読み込もうとしたときにバグを生成しました.40行以下が残っていました。

ファイルから読み込もうとする前にファイルの終わりを確認する方法がわかりません。ファイルが大きいので、ファイル全体を読み込んで合計行数を取得したくありません。したがって、私は第2のアプローチを試みた。

2) セットchunksize。これはうまく動作しますが、私はその後、チャンク内のデータをアセスしようとすると、しかし、私は問題があります。

reader = pd.read_csv(filename, chunksize=40, sep=';') 
for chunk in reader : 
    print(chunk) # displays data -- the data looks correct 
    chunk[1]  # trying to access the values of the second column -- generates an error 

chunkのデータ型は何であり、この操作が機能としてどのように私はそれを変換することができますか?

また、メモリにファイル全体をロードせずにファイルに含まれる行数を取得するにはどうすればよいですか?

ありがとうございました! Gaelle

答えて

0

チャンクはデータフレームです。

ますので、.ix/.loc/.iloc/.at/etc.ようインデクサ(accesors)を使用してアクセスすることができます

chunk.ix[:, 'col_name'] 
chunk.iloc[:, 1] # second column 
+0

グレートを!私はちょうど試して、それは完全に動作します。迅速な回答をいただきありがとうございます。 Gaelle – Gaelle

+0

申し訳ありませんが、私はあまりにも早く話しました、私は以前と同じエラーがあります。 np.diff(chunk.ilocの[:1])#あなたが同様のパンダの方法を使用することができ、私はpandas.DataFrame.as_matrix – Gaelle

+0

@Gaelleのようなものを使用する必要が推測エラー を生成します: 'chunk.ixを[条件、 'col_name']。diff() ' – MaxU

関連する問題