python - 如何使用 HDF 文件(固定格式,多个键)作为 pandas 数据帧?

标签 python pandas hdf5 hdf

我得到了一个使用 pandas 创建的 20GB HDF5 文件,但不幸的是以固定格式(而不是表格)编写,每列编写为单独的键。这对于快速加载一项功能非常有效,但它不允许方便的面向表格的程序(例如统计分析或绘图)。

尝试加载整个文件会出现以下错误:

ValueError:当 HDF5 文件包含多个数据集时必须提供 key

f=pd.read_hdf('file_path')

ValueError                             Traceback (most recent call last)

384             for group_to_check in groups[1:]:
385                 if not _is_metadata_of(group_to_check, candidate_only_group):

--> 386                     raise ValueError('key must be provided when HDF5 file '
    387                                      'contains multiple datasets.')
    388             key = candidate_only_group._v_pathname

ValueError: key must be provided when HDF5 file contains multiple datasets.

不幸的是“key”不接受Python列表,所以我不能简单地一次性加载所有列表。有没有办法将 h5 文件从“固定”转换为“表格”?或者一次性将文件加载到数据帧?目前我的解决方案是单独加载每一列并附加到一个空数据框。

最佳答案

我不知道有任何其他方法可以逐列加载 df,但您可以使用 HDFStore 而不是 read_hdf 来极大地自动化此操作:

with pd.HDFStore(filename) as h5:
    df = pd.concat(map(h5.get, h5.keys()), axis=1)

示例:

#save df as multiple datasets
df = pd.DataFrame({'a': [1,2], 'b': [10,20]})
df.a.to_hdf('/tmp/df.h5', 'a', mode='w', format='fixed')
df.b.to_hdf('/tmp/df.h5', 'b', mode='a', format='fixed')

#read columns and concat to dataframe    
with pd.HDFStore('/tmp/df.h5') as h5:
    df1 = pd.concat(map(h5.get, h5.keys()), axis=1)

#verify
assert all(df1 == df)

关于python - 如何使用 HDF 文件(固定格式,多个键)作为 pandas 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62361617/

相关文章:

python - pandas - 如何仅将 DataFrame 的选定列保存到 HDF5

python - 使用带有外部变量的python将数据插入mysql

python - 在 Pandas 中重新采样

python - 在 pandas 中将数据帧转换为字典时出错

c - 如何将从 hdf5 文件读取的多个数据存储在一个数组中?

c++ - 创建一个模板函数来读取 hdf5 中的任意数据类型

python - 如何正确使用默认值

python - 发生错误时关闭文件而不保存 - Python

python - 如何在python中检索进程开始时间(或正常运行时间)

python - 多索引 pandas 数据框中两个不同日期的分组总和之间的差异