迭代地写入Pandas的HDF5商店

时间:2013-05-19 17:14:26

标签: python io pandas hdf5 pytables

Pandas有关于如何在HDF5文件中存储SeriesDataFramesPanels的示例:

准备一些数据:

In [1142]: store = HDFStore('store.h5')

In [1143]: index = date_range('1/1/2000', periods=8)

In [1144]: s = Series(randn(5), index=['a', 'b', 'c', 'd', 'e'])

In [1145]: df = DataFrame(randn(8, 3), index=index,
   ......:                columns=['A', 'B', 'C'])
   ......:

In [1146]: wp = Panel(randn(2, 5, 4), items=['Item1', 'Item2'],
   ......:            major_axis=date_range('1/1/2000', periods=5),
   ......:            minor_axis=['A', 'B', 'C', 'D'])
   ......:

将其保存在商店中:

In [1147]: store['s'] = s

In [1148]: store['df'] = df

In [1149]: store['wp'] = wp

检查商店中的内容:

In [1150]: store
Out[1150]: 
<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df            frame        (shape->[8,3])  
/s             series       (shape->[5])    
/wp            wide         (shape->[2,5,4])

关闭商店:

In [1151]: store.close()

问题:

  1. 在上面的代码中,实际写入磁盘的数据是什么时候

  2. 假设我想将.csv个文件中的数千个大型数据帧添加到单个.h5文件中。我需要加载它们并将它们逐个添加到.h5文件中,因为我不能能够将它们全部放在内存中,因为它们会占用太多内存。这可能与HDF5有关吗?这样做的正确方法是什么?

  3. Pandas文档说明如下:

      

    “这些商店不会附加一旦写入(尽管你只是   删除它们并重写)。他们也不是可查询的;他们一定是   完整地检索。“

    不可附加还是可查询是什么意思?此外,它不应该说关闭而不是

1 个答案:

答案 0 :(得分:15)

  1. 一旦声明被提出,例如store['df'] = dfclose只关闭实际文件(如果进程存在,将会关闭,但会打印一条警告消息)

  2. 阅读http://pandas.pydata.org/pandas-docs/dev/io.html#storing-in-table-format

    部分

    .h5文件中放置大量节点通常不是一个好主意。您可能希望追加并创建较少数量的节点。

    您可以逐个遍历.csvstore/append。类似的东西:

    for f in files:
      df = pd.read_csv(f)
      df.to_hdf('file.h5',f,df)
    

    将是一种方式(为每个文件创建单独的节点)

  3. 不可追加 - 一旦你写完,你只能一次全部检索,例如你不能选择一个小节

    如果您有桌子,那么您可以执行以下操作:

    pd.read_hdf('my_store.h5','a_table_node',['index>100'])
    

    就像数据库查询一样,只获取部分数据

    因此,商店不可附加,也不可查询,而表格