为了账号安全,请及时绑定邮箱和手机立即绑定

用另一个Pandas DataFrame更新存储在Pytable中的Pandas DataFrame

用另一个Pandas DataFrame更新存储在Pytable中的Pandas DataFrame

梦里花落0921 2021-03-26 18:59:05
我试图创建一个函数来更新存储在PyTable中的Pandas DataFrame,并使用来自Pandas DataFrame的新数据进行更新。我想检查特定的DatetimeIndexes(值是NaN或可用的新时间戳)在PyTable中是否缺少某些数据,将其替换为给定熊猫DataFrame中的新值,并将其附加到Pytable中。基本上,只需更新一个Pytable。我可以在Pandas中使用Combine_first方法获取组合的DataFrame。在Pytable下方使用伪数据创建:import pandas as pdimport numpy as npimport datetime as dtindex = 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的dataFrame: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保留原始值,而不更新现有值。我现在有重复的条目(按索引),因为原始值没有被覆盖。如何使用另一个DataFrame更新PyTable?
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

目前不支持此功能。PyTables确实支持一种update方法,但未在熊猫中实现。

最简单的方法是使用mode='w'和写入新文件,或者

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

HDF5 不是“常规”数据库,并且如果需要使用SQL,则更新也不是常见的操作。

随意要求update作为一个问题的增强。


查看完整回答
反对 回复 2021-03-31
?
慕少森

TA贡献2019条经验 获得超9个赞

最后,我自己发现了它。就我而言,当可以覆盖整个Node时,因为“ combine_first”为您提供了原始值和新值,因此可以使用

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

而不是

store.append(key,value).


查看完整回答
反对 回复 2021-03-31
  • 3 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信