使用odo转换pandas hdfstore时维护数据列

时间:2015-05-26 22:54:41

标签: python pandas hdfstore blaze

我正在使用blaze项目中的odo按照此问题中的建议合并多个pandas hdfstore表:Concatenate two big pandas.HDFStore HDF5 files

商店拥有相同的列和非重叠的标志,设计和几百万行。单个文件可能适合内存,但总组合文件可能不适合。

有没有办法可以保留hdfstore创建的设置?我放松了数据列和压缩设置。

我没有运气就试过odo(part, whole, datacolumns=['col1','col2'])

或者,任何有关替代方法的建议都将受到赞赏。我当然可以手动执行此操作但是我必须管理chunksizing以便不会耗尽内存。

1 个答案:

答案 0 :(得分:2)

odo不支持compression和/或data_columns ATM的传播。两者都很容易添加,我创建了一个问题here

您可以pandas这样做:

In [1]: df1 = DataFrame({'A' : np.arange(5), 'B' : np.random.randn(5)})

In [2]: df2 = DataFrame({'A' : np.arange(5)+10, 'B' : np.random.randn(5)})

In [3]: df1.to_hdf('test1.h5','df',mode='w',format='table',data_columns=['A'])

In [4]: df2.to_hdf('test2.h5','df',mode='w',format='table',data_columns=['A'])

迭代输入文件。块读/写到最终商店。请注意,您还必须在此处指定data_columns

In [7]: for f in ['test1.h5','test2.h5']:
   ...:     for df in pd.read_hdf(f,'df',chunksize=2):
   ...:         df.to_hdf('test3.h5','df',format='table',data_columns=['A'])
   ...:         

In [8]: with pd.HDFStore('test3.h5') as store:
    print store
   ...:     
<class 'pandas.io.pytables.HDFStore'>
File path: test3.h5
/df            frame_table  (typ->appendable,nrows->1,ncols->2,indexers->[index],dc->[A])