pandas DataFrame からの新しいデータで PyTable に保存した pandas DataFrame を更新する関数を作成しようとしています。特定の DatetimeIndexes (値が NaN または新しいタイムスタンプが利用可能) の PyTable に欠落しているデータがあるかどうかを確認し、これを特定の pandas DataFrame からの新しい値に置き換えて、これを Pytable に追加します。基本的に、Pytable を更新するだけです。Pandas では、combine_first メソッドを使用して、結合された DataFrame を取得できます。Pytable の下にはダミー データが作成されます。
import pandas as pd import numpy as np import datetime as dt index = pd.DatetimeIndex(start = dt.datetime(2001,1,1,0,0), periods = 20000,freq='10T') data_in_pytable = pd.DataFrame(index=index,data=np.random.randn(20000,2),columns=['value_1','value_2']) data.to_hdf(r'C:\pytable.h5','test',mode='r+',append=True,complevel=9,complib='zlib')
これで pytable が作成されました。Pytableを更新したい別のデータフレームがあると仮定します:
new_index = pd.DatetimeIndex(start = dt.datetime(2001,5,1,0,0), periods = 10000,freq='10T') data_to_update=pd.DataFrame(index=new_index,data=np.random.randn(10000,2),columns=['value_1','value_2']) store=pd.HDFStore(r'C:\pytable.h5',mode='r+',complevel=9,complib='zlib') store.append('test',store.select('test').combine_first(data_to_update)) store.close()
問題は、PyTable が元の値を保持し、既存の値を更新しないことです。元の値が上書きされないため、(インデックスによる) エントリが重複しています。
概要: PyTable を別の DataFrame で更新するにはどうすればよいですか?
ありがとう、エルフ