4

Pandas を使用して、シリーズをリアルタイムで操作したいと考えています。毎秒、最新の観察結果を既存のシリーズに追加する必要があります。私のシリーズは DataFrame にグループ化され、HDF5 ファイルに保存されます。

現時点で私がそれを行う方法は次のとおりです。

>> existing_series = Series([7,13,97], [0,1,2]) 
>> updated_series = existing_series.append( Series([111], [3]) )

これが最も効率的な方法ですか?数え切れないほどの投稿を読みましたが、高頻度データの効率性に焦点を当てたものは見つかりません。

編集:モジュールのシェルフとピクルについて読んだところです。基本的にリストをディスクに保存するという、私がやろうとしていることを彼らが達成するようです。リストが大きいため、完全なリストをメモリにロードせずに、一度に 1 つずつ効率的に値を追加する方法はありますか?

4

1 に答える 1

3

0.10(近日公開)の​​新しいPyTablesドキュメントをご覧になるか、マスターから入手できます。http://pandas.pydata.org/pandas-docs/dev/whatsnew.html

PyTablesは実際には追加に非常に優れており、毎秒HDFStoreへの書き込みは機能します。DataFrameテーブルを保存するとします。次に、次のようなクエリでデータを選択できます。

store.append('df', the_latest_df)
store.append('df', the_latest_df)
....
store.select('df', [ 'index>12:00:01' ])

これがすべて同じプロセスからのものである場合、これはうまく機能します。ライタープロセスがあり、別のプロセスが読み取りを行っている場合、これは少し注意が必要です(ただし、実行している内容によっては正しく機能します)。

もう1つのオプションは、メッセージングを使用して1つのプロセスから別のプロセスに送信する(そしてメモリに追加する)ことです。これにより、シリアル化の問題が回避されます。

于 2012-12-10T00:21:51.583 に答える