确定 pandas HDF 文件中 DataFrame 的格式

Determine format of a DataFrame in pandas HDF file

有一个HDF文件'file.h5',其中保存的pandas DataFrame(或Series)的键名是'df'。如何确定 'df' 以何种格式(即“固定”或“table”)保存到文件中?

感谢您的帮助!

默认使用的格式是 "fixed",它允许快速 read/write 功能,但既不可追加也不可搜索。

但是,您甚至可以明确指定要将其保存在 hdf5 文件中的格式,如下所示:

df.to_hdf('file.h5', key='df', mode='w', format='table')

注意 - 上述命令只是为了说明格式参数的使用而选择的示例。参数的值可以根据您的要求保留。

有关与此相关的任何进一步参考,您还可以访问下面的 pandas 文档页面:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_hdf.html

希望以上信息对您有所帮助。

有点晚了,但也许其他人会觉得有用。

您可以解析 HDFStore.info() 的输出。 table 格式的对象具有类型 appendable:

>>> print(h5_table.info())
<class 'pandas.io.pytables.HDFStore'>
File path: /tmp/df_table.h5
/df            frame_table  (typ->appendable,nrows->2,ncols->2,indexers->[index],dc->[])

>>> print(h5_fixed.info())
<class 'pandas.io.pytables.HDFStore'>
File path: /tmp/df_fixed.h5
/df            frame        (shape->[2,2]) 

这是一个最小的(即没有丢失文件或密钥的错误处理)示例:

def get_hd5_format(path, key):
    with pd.HDFStore(path) as store:
        info = store.info()
    return 'table' if 'typ->appendable' in next(k for k in info.splitlines()[2:] if k.startswith('/'+key)).split()[2] else 'fixed'

用法示例:

>>> get_hd5_format('/tmp/df_table.h5', 'df')
'table'
>>> get_hd5_format('/tmp/df_fixed.h5', 'df')
'fixed'