2017-06-08 16 views
1

私は大きなDataFrameオブジェクト(1,440,000,000行)を持っています。私はメモリ(swap includet)の制限で動作します。`DataFrame`ローのメモリ効率的なフィルタリング

フィールドの特定の値を持つ行のサブセットを抽出する必要があります。しかし、私はそのように行う場合:

>>> SUBSET = DATA[DATA.field == value] 

は私がMemoryError例外やクラッシュのいずれかで終わります。 中間のマスク(DATA.field == value)を計算せずに明示的に行をフィルタリングする方法はありますか?

私はDataFrame.filter()DataFrame.select()メソッドを見つけましたが、行データではなく列ラベル/行インデックスで動作します。

答えて

3

使用query、それは少し速くする必要があります:データフレーム内のすべてのデータが同じタイプである任意の変化による場合は、

df = df.query("field == value") 
0

代わりにnumpyの配列を使用し、それはより多くのメモリ効率的かつ高速です。 df.as_matrix()によって、データフレームをnumpy行列に変換することができます。サイズをバイト単位で返します

import sys 
    sys.getsizeof() 

また、あなたは、データフレームがすでにによって取るどのくらいのメモリをチェックしたいかもしれないと。

+0

ありがとうございますが、私が尋ねていることではありません。私のフィールドの型は異なっています( 'int'、' float'と 'str'-wor、' dtype = "category" 'を使います) – abukaj

関連する問題