使用xarray.open_mfdataset批量加载.nc文件报错的解决方法咨询
解决xarray.open_mfdataset拼接无维度坐标报错问题
问题原因
你之前添加的name是标量坐标,并非可用于拼接的维度坐标。xarray需要一个带长度的共享维度(如序列索引、时间轴)才能将多个数据集按顺序合并,标量坐标无法满足拼接要求。
两种可行解决方案
方案一:直接打开时指定拼接维度(无需修改原文件)
通过手动排序文件列表,并指定新的拼接维度,一步完成合并:
import xarray as xr import glob # 按文件名中的数字排序,确保文件顺序正确 file_list = sorted(glob.glob('*.nc'), key=lambda x: int(x.split('.')[0])) # 指定拼接的新维度(比如命名为file_index),用nested模式合并 labels = xr.open_mfdataset(file_list, concat_dim='file_index', combine='nested') # 给新维度赋值对应的索引值(0、1、2...) labels = labels.assign_coords(file_index=range(len(file_list)))
方案二:修改原文件,添加维度坐标(适合需要保留修改后文件的场景)
把标量坐标改成维度坐标,让每个数据集拥有可拼接的维度:
import xarray as xr for i in range(0,10): ds = xr.open_dataset(f'{i}.nc') # 新增file_index维度,并赋值当前文件的索引 ds = ds.expand_dims({'file_index': [i]}) ds.to_netcdf(f'{i}_named.nc') # 打开修改后的文件,此时已有可拼接的维度 file_list = sorted(glob.glob('*_named.nc'), key=lambda x: int(x.split('_')[0])) labels = xr.open_mfdataset(file_list)
内容的提问来源于stack exchange,提问作者OblivioN
相关产品推荐
相关产品推荐

