財務データを含む大きなpandas DataFramesがあります。h5ファイルに追加の列とDataFramesを追加して連結しても問題ありません。
財務データは毎分更新されています。毎分.h5ファイル内のすべての既存のテーブルにデータ行を追加する必要があります。
これが私がこれまでに試したことですが、何をしても、.h5ファイルを上書きし、データを追加するだけではありません。
HDFStoreの方法:
#we open the hdf5 file
save_hdf = HDFStore('test.h5')
ohlcv_candle.to_hdf('test.h5')
#we give the dataframe a key value
#format=table so we can append data
save_hdf.put('name_of_frame',ohlcv_candle, format='table', data_columns=True)
#we print our dataframe by calling the hdf file with the key
#just doing this as a test
print(save_hdf['name_of_frame'])
私が試したもう一つの方法、to_hdf:
#format=t so we can append data , mode=r+ to specify the file exists and
#we want to append to it
tohlcv_candle.to_hdf('test.h5',key='this_is_a_key', mode='r+', format='t')
#again just printing to check if it worked
print(pd.read_hdf('test.h5', key='this_is_a_key'))
次に、read_hdfを実行した後のデータフレームの1つを示します。
time open high low close volume PP
0 1505305260 3137.89 3147.15 3121.17 3146.94 6.205397 3138.420000
1 1505305320 3146.86 3159.99 3130.00 3159.88 8.935962 3149.956667
2 1505305380 3159.96 3160.00 3159.37 3159.66 4.524017 3159.676667
3 1505305440 3159.66 3175.51 3151.08 3175.51 8.717610 3167.366667
4 1505305500 3175.25 3175.53 3170.44 3175.53 3.187453 3173.833333
次にデータを取得するとき(毎分)に、すべての列のインデックス5にその行を追加します。その後、ファイル全体を読み取って操作する必要なく、6と7と続きます。これを行うことのポイントを無効にするメモリ。これを解決するより良い方法がある場合は、恥ずかしがらずにお勧めします。
追伸ここでそのテーブルのフォーマットを申し訳ありません
pandas.HDFStore.put() にはパラメータappend
があります(デフォルトはFalse
)-Pandasの代わりに上書きするように指示します追加。
だからこれを試してください:
_store = pd.HDFStore('test.h5')
store.append('name_of_frame', ohlcv_candle, format='t', data_columns=True)
_
store.put(..., append=True)
も使用できますが、このファイルもテーブル形式で作成する必要があります。
_store.put('name_of_frame', ohlcv_candle, format='t', append=True, data_columns=True)
_
注:追加はtable
(_format='t'
_-は_format='table'
_のエイリアス)形式でのみ機能します。
tohlcv_candle.to_hdf('test.h5',key='this_is_a_key', append=True, mode='r+', format='t')
別の引数append=True
を渡して、既存のデータに追加するのではなく、そのキーの下にデータを追加することを指定する必要があります。 -それを書きます。
これがない場合、デフォルトはFalse
であり、'this_is_a_key'
の下にある既存のテーブルが検出されると、上書きされます。
mode=
引数はファイルレベルでのみ存在し、ファイル全体を上書きするか追加するかを示します。
1つのファイルには任意の数のキーを含めることができるため、mode='a', append=False
設定は、1つのキーのみが上書きされ、他のキーは保持されることを意味します。
私はあなたと同じような経験があり、リファレンスドキュメントに追加の引数があることを発見しました。設定した後は、適切に追加されます。
参照: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_hdf.html
注:hdf5は、データフレームのインデックスで何もしません。データを入れる前に、または取り出すときに、それらを取り除く必要があります。