Actualice pandas DataFrame almacenado en una Pytable con otro pandas DataFrame

Estoy intentando crear una función que actualiza un DataFrame de pandas almacenado que he almacenado en una PyTable con datos nuevos de un DataFrame de pandas. Quiero verificar si faltan algunos datos en la PyTable para los Indices de fecha y hora específicos (el valor es NaN o hay una nueva marca de tiempo disponible), reemplazarlo con los nuevos valores de un dataframe pandas dado y adjuntarlo a la Pytable. Básicamente, solo actualiza un Pytable. Puedo obtener el DataFrame combinado utilizando el método combine_first en Pandas. Debajo de la Pytable se crea con datos ficticios:

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') 

Así se crea el pytable. Suponiendo que tengo otro dataFrame con el que quiero actualizar el Pytable con:

 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() 

El problema es que PyTable mantiene los valores originales, no actualiza los existentes. Ahora tengo entradas duplicadas (por índice) porque los valores originales no se sobrescriben.

Resumen: ¿Cómo puedo actualizar una PyTable con otro DataFrame?

Gracias elv

Al final, lo descubrí yo mismo. En mi caso, cuando está bien sobrescribir todo el Nodo ya que “combine_first” obtiene el original y los nuevos valores, está bien usar

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

en vez de

 store.append(key,value). 

Esto no es compatible actualmente. PyTables admite un método de update , pero no está implementado en pandas.

El método más sencillo es usar mode='w' y escribir un nuevo archivo o

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

HDF5 no es una base de datos ‘regular’ y la actualización no es una operación común, si necesita que SQL sea una opción.

No dude en solicitar update como una mejora como un problema.