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

Python 使用odo转换hdfstore时维护数据列,python,pandas,hdfstore,blaze,Python,Pandas,Hdfstore,Blaze,我正在使用blaze项目中的odo合并多个pandas hdfstore表,如下所示: 根据设计,这些商店有相同的列和不重叠的标记,还有几百万行。单个文件可以放入内存,但总的组合文件可能不会 有没有办法保留创建hdfstore时使用的设置?我松开了数据列和压缩设置 我尝试了odo(部分、整体、datacolumns=['col1'、'col2'])但运气不佳 或者,如果您对其他方法有任何建议,我们将不胜感激。我当然可以手动执行此操作,但为了不耗尽内存,我必须管理组块大小。odo不支持压缩和/或数

我正在使用blaze项目中的odo合并多个pandas hdfstore表,如下所示:

根据设计,这些商店有相同的列和不重叠的标记,还有几百万行。单个文件可以放入内存,但总的组合文件可能不会

有没有办法保留创建hdfstore时使用的设置?我松开了数据列和压缩设置

我尝试了
odo(部分、整体、datacolumns=['col1'、'col2'])
但运气不佳


或者,如果您对其他方法有任何建议,我们将不胜感激。我当然可以手动执行此操作,但为了不耗尽内存,我必须管理组块大小。

odo
不支持
压缩和/或
数据列的传播。两者都很容易添加,我创建了一个问题

您可以通过以下方式在
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'])
迭代输入文件。区块读/写到最终存储。请注意,您还必须在此处指定
数据列

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])
[7]中的
:对于['test1.h5','test2.h5']中的f:
…:对于pd中的df.read_hdf(f,'df',chunksize=2):
…:df.to_hdf('test3.h5','df',format='table',data_columns=['A']))
...:         
[8]中:以pd.HDFStore('test3.h5')作为存储:
印刷店
...:     
文件路径:test3.h5
/df frame_表格(典型->可追加,nrows->1,ncols->2,索引器->索引,dc->[A])

我在这里挠头。从逻辑上讲,这应该是可行的,但对我来说(复制粘贴代码)的最终结果是只有一行的存储。在您的输出中,似乎还有一行<代码>nrows->1
。我错过什么了吗?我尝试使用显式模式class='a',虽然这是默认模式,但得到了相同的结果。我认为您必须将
append=True
添加到final
df.to_hdf(…)
,因为它似乎有一个独立于标准append file模式的设置。在您的输出中,只有一行
nrows->1
,如果我添加append选项,它将直接显示为10行。谢谢你的方法!