提取xarray变量保存为NetCDF文件时触发AttributeError的技术求助
问题分析与解决办法
错误原因
你遇到的AttributeError是因为DS_subset是xarray.Variable对象,这个类并没有to_xarray()方法——to_xarray()是给非xarray类型(比如numpy数组)用来转换为xarray对象的方法,而你已经拿到了xarray的变量,不需要这一步转换。
正确的保存方式
方法1:直接将Variable封装进Dataset
只需要把DS_subset作为值,搭配变量名(比如原变量名zos)组成字典,传入xr.Dataset()即可:
new_filename = './data/newfile.nc' xr.Dataset({'zos': DS_subset}).to_netcdf(path=new_filename)
方法2:用xarray原生切片简化子集提取(更推荐)
你手动通过np.where找索引的方式可以简化为xarray内置的sel方法,代码更简洁且自动保留坐标信息:
# 定义空间范围(经度已经转换为0-360范围) lat_bnds, lon_bnds = [25, 50], [275, 300] # 对应原[-85+360, -60+360] # 直接用sel做标签切片 DS_subset = DS['zos'].sel(lat=slice(*lat_bnds), lon=slice(*lon_bnds)) # 保存为NetCDF DS_subset.to_dataset(name='zos').to_netcdf('./data/newfile.nc')
这里to_dataset(name='zos')可以直接把单个Variable转换为包含该变量的Dataset,比手动构造字典更便捷。
额外说明
如果需要保留原Dataset中的全局元数据,可以在创建新Dataset时一并传入:
new_ds = xr.Dataset({'zos': DS_subset}, attrs=DS.attrs) new_ds.to_netcdf('./data/newfile.nc')
内容的提问来源于stack exchange,提问作者gis_grad_student
相关产品推荐
相关产品推荐

