pandas调用to_hdf写入HDF5生成多字段,如何直接将数值存入目标key
解决方案
出现你描述的情况,是因为pandas的to_hdf方法会按照自身定义的序列化格式存储DataFrame完整结构(包括索引、列名、数据块等信息),才会生成axis0、block0_values这类额外子字段。要直接将数值内容写入foobar/data路径,改用h5py库直接写入numpy数组即可。
前置依赖
确保已经安装h5py库,未安装可执行命令:pip install h5py
修改后的代码
import pandas as pd import h5py csv_filename = 'test.csv' hdf_filename = 'test.h5' csv_data = pd.read_csv(csv_filename) # 转置后提取纯数值数组 data = pd.DataFrame.transpose(csv_data).values # 直接写入HDF5文件 with h5py.File(hdf_filename, 'w') as h5_file: h5_file.create_dataset('foobar/data', data=data)
修改后在Matlab/Octave中加载test.h5时,foobar.data就直接对应你需要的数值矩阵,无需访问子字段。
可选扩展:保留元数据
如果使用方还需要原始行列名信息,可以额外写入对应数据集:
with h5py.File(hdf_filename, 'w') as h5_file: h5_file.create_dataset('foobar/data', data=data) # 写入转置后的行名(原csv的列名) h5_file.create_dataset('foobar/row_names', data=csv_data.columns.astype('S')) # 写入转置后的列名(原csv的行号) h5_file.create_dataset('foobar/col_names', data=csv_data.index.astype(str).astype('S'))
内容的提问来源于stack exchange,提问作者Haisam
相关产品推荐
相关产品推荐

