【问题标题】:How does one store a Pandas DataFrame as an HDF5 PyTables table (or CArray, EArray, etc.)?如何将 Pandas DataFrame 存储为 HDF5 PyTables 表(或 CArray、EArray 等)?
【发布时间】:2016-11-22 11:30:02
【问题描述】:

我有以下熊猫数据框:

import pandas as pd
df = pd.read_csv(filename.csv)

现在,我可以使用 HDFStore 将 df 对象写入文件(就像将键值对添加到 Python 字典中):

store = HDFStore('store.h5')
store['df'] = df

http://pandas.pydata.org/pandas-docs/stable/io.html

当我查看内容时,这个对象是frame。

store 

输出

<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df            frame        (shape->[552,23252])

但是,为了使用索引,应该将其存储为table 对象。

我的方法是尝试HDFStore.put(),即

HDFStore.put(key="store.h", value=df, format=Table)

但是,这会失败并出现错误:

TypeError: put() missing 1 required positional argument: 'self'

如何将 Pandas Dataframes 保存为 PyTables 表?

【问题讨论】:

    标签: python pandas hdf5 pytables hdfstore


    【解决方案1】:

    如何将 Pandas Dataframes 保存为 PyTables 表?

    除了已接受的答案之外,您应该始终关闭 PyTable 文件。为方便起见,Pandas 提供 HDFStore 作为上下文管理器:

    with pd.HDFStore('/path/to/data.hdf') as hdf:
       hdf.put(key="store.h", value=df, format='table', data_columns=True)
    

    【讨论】:

      【解决方案2】:

      通用部分 - 创建或打开现有的 HDFStore 文件:

      store = pd.HDFStore('store.h5')
      

      如果您想为所有列编入索引,试试这个:

      store.append('key_name', df, data_columns=True)
      

      或者,如果您只想为列的子集编制索引:

      store.append('key_name', df, data_columns=['colA','colC','colN'])
      

      PS HDFStore.append() 默认以table 格式保存DF

      【讨论】:

      • 谢谢。您如何将其存储为 CArray 或 EArray?
      • @JianguoHisiang,我没有使用 CArray / EArray 的经验,所以我无法在评论中回答您的问题。但是 HDFStore 有什么问题呢?我的回答有帮助吗?
      • 没错,是的。但是,我不确定如何查询这个“frame_table”对象(它不是一个“表”对象)。通常,如果 col1 被编入索引,您会尝试类似 result = [row for row in table.where('col1 &gt; 100 &amp; col1 &lt; 200')]。
      • @JianguoHisiang,你可以这样做:df = store.select(..., where='...')或df = pd.read_hdf(..., where='...')
      • 这是否与对 PyTables 表使用压缩一样有效? pytables.org/usersguide/optimization.html 我正在尝试使用 800 GB 大小的 frame_table 进行这些查询,因此它需要尽可能高效。导入这些数据的唯一方法是使用 pandas 数据框,所以我感觉有点失落。
      猜你喜欢
      • 2014-09-20
      • 2015-11-22
      • 2013-12-01
      • 1970-01-01
      • 2012-10-07
      • 2019-02-11
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      相关资源
      最近更新 更多