如何使用Xarray合并维度长度不同的多个HDF5格式仪器观测数据文件
报错原因
你之前的写法是直接复制第一个数据集d1得到d0,此时d0的phony_dim_0维度长度固定为d1的对应长度(441),你将两个数据集的变量垂直拼接后总长度变为761,和原有维度长度不匹配,因此触发形状不匹配报错。
解决方案
直接使用Xarray自带的concat函数沿phony_dim_0维度拼接所有数据集即可,无需手动扩展维度或新建空数据集,该方法会自动保留原有数据的变量、属性结构,符合厂商软件的格式要求。
实现代码
import os import xarray as xr # 替换为你的数据存储文件夹路径 DATA_PATH = "./your_data_dir" # 筛选目录下所有h5格式文件,避免读取无关文件 h5_files = [ os.path.join(DATA_PATH, f) for f in os.listdir(DATA_PATH) if f.lower().endswith('.h5') ] # 批量读取所有h5文件为Xarray数据集 ds_list = [xr.open_dataset(file) for file in h5_files] # 沿时间维度phony_dim_0拼接所有数据集 ds_combined = xr.concat( ds_list, dim="phony_dim_0", # 若不同文件的属性有冲突,可选择保留第一个文件的属性 combine_attrs="override" ) # 导出合并后的文件,使用h5netcdf引擎保证和原始HDF5格式兼容 ds_combined.to_hdf5("combined_output.h5", engine="h5netcdf") # 关闭所有数据集释放内存 for ds in ds_list: ds.close() ds_combined.close()
注意事项
- 如果合并后导入厂商软件识别异常,可以在导出时添加参数
mode='w'覆盖写入,或者检查phony_dim_0维度的坐标值是否符合原始格式要求,无特殊需求不需要额外修改坐标。 - 单次合并的文件数量不受限制,代码支持任意多个同结构HDF5文件的拼接。
内容的提问来源于stack exchange,提问作者Han Zhengzu
相关产品推荐
相关产品推荐

