to_hdf()保存压缩HDF5文件必须设format='table',再指定complib(如'blosc')和complevel(1–9整数),否则无效;read_hdf()自动解压,无需且不可传压缩参数。
用 to_hdf() 保存带压缩的 HDF5 文件
Pandas 的 to_hdf() 默认不启用压缩,必须显式指定压缩参数才能减小文件体积。关键不是“能不能”,而是“不设就等于没压”——很多用户保存后发现文件和原始 CSV 差不多大,就是漏了这步。
-
complevel必须设为 1–9 之间的整数(0 表示无压缩),建议从 5 开始试;complib指定压缩库,'blosc'通常比默认的'zlib'更快且压缩率更好(需安装blosc:pip install blosc) -
format='table'是必须的,只有 table 格式支持压缩;format='fixed'不支持任何压缩参数,设了也忽略 - 如果写入时遇到
TypeError: Compression requires format='table',说明你用了fixed或根本没传format(默认是fixed)
df.to_hdf('data.h5', key='df', format='table',
complib='blosc', complevel=5)
用 read_hdf() 加载时无需额外参数
压缩是存储层特性,加载时 Pandas 自动解压,read_hdf() 完全不用关心 complib 或 complevel。只要文件路径和 key 正确,行为和读普通 HDF5 一样。
- 常见误操作:试图在
read_hdf()里传complib,会直接报错TypeError: read_hdf() got an unexpected keyword argument 'complib' - 如果加载报
KeyError: 'No object named xxx in the file',先确认保存时用的key和读取时一致,HDF5 的 key 区分大小写,且不能含斜杠
df = pd.read_hdf('data.h5', key='df')
压缩效果和性能权衡要看场景
压缩不是“开就一定好”。complevel=9 虽然体积最小,但写入可能慢 3 倍以上,读取也可能变慢(尤其随机访问 table 格式时)。是否值得压,取决于你的瓶颈在哪:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
- 数据长期归档、写一次读多次 → 用
complevel=7+complib='blosc'更划算 - 频繁写入调试数据、本地快速迭代 →
complevel=1或干脆不用压缩 - 内存受限但 CPU 充足(如云函数)→ 选
'blosc';老机器没装 blosc 库 → 只能用'zlib',且complevel > 6明显拖慢写入
注意 PyTables 版本和 blosc 依赖
Pandas 的 HDF5 支持底层靠 PyTables,而 PyTables 对 blosc 的支持不是“装了 blosc 就自动可用”。常见卡点:
-
ValueError: complib not supported: blosc→ PyTables 编译时没链接 blosc,重装 PyTables:pip uninstall pytables && pip install --no-binary pytables pytables - 用 conda 环境更稳:conda install pytables blosc
- HDF5 文件跨平台读写一般没问题,但若用
complib='blosc'保存,另一台没装 blosc 的机器用 pandas 读会失败(报IOError类错误),不是 Pandas 问题,是底层 PyTables 解压器缺失
压缩本身不难,难的是记住:format='table' 是前提,complib 是可选但需环境支持,而读取时所有压缩参数都得忘掉——它们只活在写入那一刻。