2017-05-26 14 views
0

データフレームに大量のデータがチャンクでロードされているとします。 は、例えばのために: - 3ギガバイトと仮定するとレコードが千万をしている(行数)データフレームは大量のデータをどのようにメモリに格納して操作するのですか?

c = pd.read_sql("select a,b,c from table;", con=db, chunksize=10**2): 
b = c['a'] 

それはテーブルのチャンクを読んでいるので、私は40以上のGBと約2かもしれ3つの列を選択しているテーブルを持っていますチャンクでは、一度に3 GBのメモリ全体をロードせず、すぐに10^2 MBだけで動作し、次に自動的に次のチャンクにジャンプしますか?

そうでない場合、これをどのように動作させるか?だから、最初にすべてのドキュメント

chunksize : int, default None 
    If specified, return an iterator where chunksize is the number of rows 
    to include in each chunk. 

を引用

答えて

1

は、チャンクサイズは行数ではなくMB単位でサイズを表します。 chunkksizeを指定すると、データフレームの代わりにイテレータが返されるという効果もあります。だからあなたはそれをループする必要があります。それを考えると、Python側では、10^2行のメモリだけが必要です。

+0

ああ、chunksizeは行数を返します。あなたがそれをループしているときは、次のようなforループが必要です:pd.read_sqlのcの場合( "select a、b、c from table;"、con = db、chunksize = 10 ** 2): – Viv

+0

それを行う方法です。 'iter = pd.read_sql("テーブルからa、b、cを選択する "、con = db、chunksize = 10 ** 2)'と 'iter:'のdfのために 'は等価になります。 – nucleon

関連する問題