6

短い質問

Pandas が HDFStore (例: .mean() または .apply() ) で動作する場合、メモリ内の完全なデータを DataFrame としてロードしますか?それともレコードごとに Serie として処理しますか?

長い説明

大きなデータ ファイルを扱う必要があり、データ ファイルの出力形式を指定できます。

Pandas を使用してデータを処理するつもりであり、パフォーマンスを最大化するために最適な形式を設定したいと考えています。

panda.read_table() が長い道のりを歩んできたことを見てきましたが、DataFrame に変換するために読みたい元のファイル サイズと少なくとも同じ量のメモリ (実際には少なくとも 2 倍のメモリ) を必要とします。 . これは最大 1 GB のファイルで機能する可能性がありますが、それ以上ですか? 特にオンライン共有マシンでは、それは難しいかもしれません。

ただし、Pandas が pytables を使用して HDF テーブルをサポートしているように見えることがわかりました。

私の質問は、HDF テーブル全体で操作を行うときに、Pandas はどのようにメモリを管理するのでしょうか? たとえば、.mean() または .apply() です。最初にテーブル全体を DataFrame にロードしますか、それともメモリに保存せずに HDF ファイルから直接データに対して関数を処理しますか?

副次的な質問: hdf5 形式はディスク使用量がコンパクトですか? つまり、xml のように詳細なのか、それとも JSON のように詳細なのか? (インデックスなどがあることは知っていますが、ここではデータの裸の説明に興味があります)

4

1 に答える 1

7

はい、いいえ、Pandas DataFrame のロード方法によって異なります。

read_table() メソッドと同様に、ここで説明されているように、一度に 1 つのレコードのみを取得するジェネレータ オブジェクトを取得できる「イテレータ」引数があります: http://pandas.pydata.org/pandas-docs/ dev/io.html#イテレータ

さて、.mean() や .apply() などの関数がこれらのジェネレーターでどのように機能するかわかりません。

誰かがより多くの情報/経験を持っている場合は、遠慮なく共有してください!

HDF5 オーバーヘッドについて:

HDF5 は、ディスク上のチャンク構造をマップするために使用される B ツリーをメモリに保持します。データセットに割り当てられるチャンクが多いほど、B ツリーは大きくなります。大きな B ツリーはメモリを消費し、ファイル ストレージのオーバーヘッドを引き起こし、ディスク I/O とメタデータ キャッシュの競合を増やします。したがって、メモリと I/O のオーバーヘッド (小さな B ツリー) とデータにアクセスする時間 (大きな B ツリー) のバランスをとることが重要です。

http://pytables.github.com/usersguide/optimization.html

于 2013-03-29T00:24:49.820 に答える