迭代地写入Pandas的HDF5商店

Ame*_*ina 23 python io hdf5 pytables pandas

大熊猫对如何存储下面的例子Series,DataFramesPanels在HDF5文件:

准备一些数据:

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'])
   ......:
Run Code Online (Sandbox Code Playgroud)

将其保存在商店中:

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

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

In [1149]: store['wp'] = wp
Run Code Online (Sandbox Code Playgroud)

检查商店里的东西:

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])
Run Code Online (Sandbox Code Playgroud)

关闭商店:

In [1151]: store.close()
Run Code Online (Sandbox Code Playgroud)

问题:

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

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

  3. Pandas文档说明如下:

    "这些商店一旦写完就不能追加(虽然你只是删除它们并重写).它们也不可查询 ;它们必须全部检索."

    不可附加也不可查询是什么意思?还有,它不应该说一旦关闭而不是书面

Jef*_*eff 15

  1. 声明一旦完成,例如store['df'] = df.在close刚刚关闭的实际文件(这会为您如果进程存在被关闭,但会显示一条警告消息)

  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)
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 不可附加 - 一旦你编写它,你只能一次检索它,例如你不能选择一个子部分

    如果你有一张桌子,那么你可以做以下事情:

    pd.read_hdf('my_store.h5','a_table_node',['index>100'])
    
    Run Code Online (Sandbox Code Playgroud)

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

    因此,商店不是可附加的,也不是可查询的,而表是两者.

  • 节点名称是``f``,``store [f] = pd.read_csv(f)``相当于``df.to_hdf`,但``df.to_hdf``自动打开/关闭商店为了你.``store ['df'] = df``创建/覆盖名为``'df'``的节点.仅供参考,继续这样做是个好主意,请参阅有关删除数据的部分.节点只能容纳一个对象(例如一个帧),但如果需要,可以创建节点层次结构(例如``node_a/df,node_a/sub_node/df``在单个节点中有效地保存多个帧 (2认同)
  • 继承人链接2一些食谱:http://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstore (2认同)