2016-03-21 15 views
0
f = pd.read_hdf('Sensor_Data.h5','f') 
pieces = [f[x: x + 360] for x in xrange(504649)] 
df = pd.concat(pieces) 

午前中です。私は50万以上の行のファイルを持っています。私はこれから360行のスライスを取り出し、毎回1行ずつ下に移動したい。 (だから私はたくさんのデータで終わります。)パンダデータフレーム:メモリ不足 - ここでは何が良い方法ですか?

期待どおり、私は上記のコードを試して、メモリエラーが発生しました。私はこれを行うより良い方法があると仮定していますか?

EDIT:コンテキストを追加するには、これは.h5ファイルです。この方法でpandasデータフレームを使用してスライスしています。私はカフェネットを使用して深いニューラルネットワークにフィードするデータの配列を作成しようとしていますが、現時点でのフォーマットは不明です...

コードは少量のデータに対して機能します。大きなもののためだけではありません。私は何をしようとしているのより明確にするには、次の

pieces = [df[x: x + 4] for x in xrange(7)] 
f = pd.concat(pieces) 
f 

Diplaysに似た新しいテーブル:Pd等の輸入パンダは

df = pd.DataFrame(np.random.randn(10,6)); df 

今すぐ [ランダムな数字の6×10のテーブルを表示]前の1つですが、拡張されました。今は行0,1,2,3,1,2,3,4,2,3,4,5,3,4,5,6 ...

"pieces"はデータフレームではありませんオブジェクトそのものですが、なんらかの理由で「リスト」になります。これらの別々のデータセット(0,1,2,3)、(1,2,3,4)などをすべてデータフレームオブジェクト自体に変換する簡単な方法はありますか? (代わりに、1つのデータフレームにそれらを一緒に連結するのは

私は、これは理にかなって願っています

+0

大量のデータを扱う私の好む方法は、['numpy.memmap'](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.memmap.html)を使用しています。 。一つの欠点は、データを 'memmap'が理解できるバイナリ形式に変換しなければならないことですが、それ以降は巨大なデータセットで簡単に作業できます。 スライスのすべての冗長データを本当に保存する必要がありますか?これらのスライスの究極の使用は何ですか?多分、イテレータを作成するほうがよいでしょう。 –

+1

さて、あなたは基本的にあなたのデータを取り、360で乗算していますよね?しかし、この最終的なデータフレームは膨大な冗長データで満たされていますが、それは無意味です。私は後で計算する目的でこれをやっていると思いますか?しかし、メモリを浪費するよりも、計算を行うより良い方法があるでしょう。例えば移動/拡張機能、先進的な(ファンシー)索引付けなどがあります。私はあなたがする必要があると思うのは、メモリのフットプリントを拡張する方法ではなく、計算を行う方法を考えることです。 – JohnE

+0

はい、後の計算のためです。私は質問を少しはっきりさせるために編集します...新しい文脈で私は何をすべきでしょうか? –

答えて

0

h5pyの使用を検討してthe websiteから:?。。「たとえば、あなたがディスクに保存されている数テラバイトのデータセットにスライスすることができ、彼らがいるかのように実際のNumPy配列だった "

0

最初に最も簡単なのは、リストの理解を使って作成したリストで、データフレームオブジェクトのリストでなければならないからです。それらを別々のデータフレームオブジェクトとして使用するには、リスト(例:pieces [0]など)にインデックスを付けるだけです。

しかし、あなたはまだ巨大なデータフレームを作成しようとしているこの問題があります。残りのコードをどのように使用するのか分かりませんが、私はあなたのdfを50万枚作成するのではなく、元のデータフレームをループし、必要な機能をデータフレームの単一スライスで呼び出すことをお勧めします。

for x in xrange(504649): 
    result = my_func(df[x:x+360]) 

このように、各スライスは使用後に解放されます。うまくいけば、その結果はフレームよりはるかに小さいでしょう。

上記と同様に、すべてのスライスをcvsファイルに分割して書き込み、必要に応じて読み込むこともできます。

関連する問題