Elv*_*vin 5 python hdf5 pytables dataframe pandas
我正在尝试使用pandas DataFrame中的新数据创建一个更新存储在PyTable中的pandas DataFrame的函数.我想检查PyTable中是否缺少特定DatetimeIndexes的某些数据(值为NaN或新的Timestamp可用),将其替换为给定pandas DataFrame中的新值,并将其附加到Pytable.基本上,只需更新Pytable.我可以使用Pandas中的combine_first方法获取组合的DataFrame.Pytable下面是用虚拟数据创建的:
Run Code Online (Sandbox Code Playgroud)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.假设我有另一个dataFrame,我想用它来更新Pytable:
Run Code Online (Sandbox Code Playgroud)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?
谢谢,Elv
最后我自己发现了。就我而言,当可以覆盖整个节点时,因为“combine_first”会为您提供原始值和新值',则可以使用
Run Code Online (Sandbox Code Playgroud)store.put(key,value,table=True,append=False)
而不是
Run Code Online (Sandbox Code Playgroud)store.append(key,value).
| 归档时间: |
|
| 查看次数: |
2314 次 |
| 最近记录: |