2016-10-11 5 views
6

のは、私はパンダDATAFRAMEHDF5でのパンダクエリのサイズを制限してRAM制限を超えないようにする方法は?

import pandas as pd 

df = pd.DataFrame() 

df 

    Column1 Column2 
0 0.189086 -0.093137 
1 0.621479 1.551653 
2 1.631438 -1.635403 
3 0.473935 1.941249 
4 1.904851 -0.195161 
5 0.236945 -0.288274 
6 -0.473348 0.403882 
7 0.953940 1.718043 
8 -0.289416 0.790983 
9 -0.884789 -1.584088 
........ 

クエリの例であるとしましょう

df.query('Column1 > Column2')のは、このクエリの保存を制限したかったので、オブジェクトはそれほど大きくなかったとしましょう。これを達成するための「パンダ」の方法はありますか?

私の質問は、主にHDF5オブジェクトのパンダでのクエリです。 HDF5オブジェクトはRAMよりもはるかに大きくなる可能性があるため、クエリはRAMよりも大きくなる可能性があります。

# file1.h5 contains only one field_table/key/HDF5 group called 'df' 
store = pd.HDFStore('file1.h5') 

# the following query could be too large 
df = store.select('df',columns=['column1', 'column2'], where=['column1==5']) 

特定のサイズを超えるクエリを実行するユーザーを停止するためのパンダ/ Pythonの方法はありますか?ここで

+0

それがマシンを壊すので、あなたがそれらを停止しますか?あるいは、マシンを破壊することなく計算を達成する方法を見つけたいですか?後者の場合、daskはあなたの友人でなければなりません – Boud

+0

'store.select(...)'を呼び出すときに 'chunksize'パラメータを使うのはどうですか? – MaxU

+0

@Boudどちらのオプションも考慮する必要があります。前者はどうですか? – ShanZhengYang

答えて

3

HDFStore.select()を呼び出すときchunksizeパラメータを使用する方法の小さなデモです:

for chunk in store.select('df', columns=['column1', 'column2'], 
          where='column1==5', chunksize=10**6): 
    # process `chunk` DF 
+0

これは私の質問にはあまり答えませんが、これはアプローチです。私がPyTablesをソフトウェアに統合して、ユーザーが 'HDFStore'に問い合わせると、「たくさんの行」に達するまでクエリを進めて、エラーをスローします。クエリが大規模であるという先験的なことが分かっていれば、上記の解決策があります。問題をはっきりと説明していますか? – ShanZhengYang

+0

@ShanZhengYang、それはまだ私にはっきりしていません...結果のDFのサイズを店舗から読む前に見積もりたいですか? – MaxU

+0

必ずしもそうではありませんが、それを実行する最善の方法と思われます。私は 'df = store.select( 'df'、columns = ['column1'、 'column2']、where = ['column1 == 5'])'を試してみて、RAM- - 制限がコンピュータのハードウェアによって設定された制限である場合、プログラムはただフリーズします。任意の制限を設定したいとしましょう4ギガバイト。 HDF5は+ TBまたはPBである可能性があります。したがって、ユーザーがこのオブジェクトを照会する場合、 'df'はRAMを簡単に超えることができます。 「悪いこと」が起こるのを止めるために、私は何の限界を置くことができますか? – ShanZhengYang

関連する問題