5

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 で更新するにはどうすればよいですか?

ありがとう、エルフ

4

2 に答える 2

3

これは現在サポートされていません。PyTablesメソッドをサポートしてupdateいますが、pandas には実装されていません。

最も簡単な方法はmode='w'、新しいファイルを使用して書き込むか、

store.remove(key); store.append(.....)

HDF5「通常の」データベースではなく、更新は一般的な操作ではありません.SQLがオプションである必要がある場合。

update問題として機能強化をリクエストしてください。

于 2013-06-10T11:31:05.157 に答える
3

結局、自分で見つけました。私の場合、「combine_first」が元の値と新しい値を取得するため、ノード全体を上書きしても問題ない場合は、使用しても問題ありません

store.put(key,value,table=True,append=False) 

の代わりに

store.append(key,value).
于 2013-06-10T13:42:49.813 に答える