2017-09-13 15 views
4

私は財務データを持つ大きなパンダのデータフレームを持っています。 追加の列とDataFramesを.h5ファイルに追加して連結しても問題はありません。Pandas、PythonでHDF5ファイルにデータを追加

財務データが毎分更新されているため、毎分.h5ファイル内の既存のすべてのテーブルに1行のデータを追加する必要があります。

これまでのところ私が試したことはありますが、私が何をしても、.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された後、次のようになります。

  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が追加されます。これを行うことのポイントを敗北させるようなメモリ内のファイル全体。 これを解決するより良い方法がある場合は、それを推奨することを恥ずかしくないでください。

P.S.ここでそのテーブルのフォーマットにごめんね。

答えて

2

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) 
+0

ことで、迅速いただき、誠にありがとうござい答え! – Karl

+0

@Karl、嬉しいことに助けてもらえました:) – MaxU

+0

なぜ 'append'が動作し、' put'がなぜそうでないのか説明を追加できますか? – Mayou36

関連する問題