重命名netCDF文件维度latitude/longitude为lat/lon出现KeyError如何解决
NetCDF维度重命名报错解决方案
报错原因
你遇到的KeyError: 'longitude not a valid dimension name'报错,常见原因有两个:
- Python3 多余的unicode前缀:代码中给维度名字符串加了
u前缀,Python3默认字符串就是unicode格式,部分旧版本的netCDF4库无法识别带u前缀的字符串参数,导致匹配不到已有的longitude维度。 - 操作顺序冲突:部分netCDF版本要求先重命名和维度同名的坐标变量,再重命名维度,否则变量绑定旧维度名的状态会导致维度重命名操作被拦截,判定维度不存在。
解决方案
方案1:修正原netCDF4代码
调整操作顺序,去掉字符串前缀即可:
from netCDF4 import Dataset # 操作前务必先备份原文件,避免修改出错丢失数据 path = 'dataset-oc-atl-chl-olci-l3-chl_300m_daily-rt_1637778183019.nc' f = Dataset(path, 'r+') # 先重命名变量,再重命名对应维度 f.renameVariable('longitude', 'lon') f.renameDimension('longitude', 'lon') f.renameVariable('latitude', 'lat') f.renameDimension('latitude', 'lat') f.close()
方案2:使用xarray处理(更推荐)
xarray会自动同步维度、坐标变量、数据变量的关联关系,不需要手动处理顺序,出错概率更低:
import xarray as xr # 读取原文件 ds = xr.open_dataset('dataset-oc-atl-chl-olci-l3-chl_300m_daily-rt_1637778183019.nc') # 一键重命名,自动更新所有关联属性 ds = ds.rename({'latitude': 'lat', 'longitude': 'lon'}) # 导出为新文件,不会损坏原文件 ds.to_netcdf('renamed_chl_dataset.nc') ds.close()
内容的提问来源于stack exchange,提问作者OlegRuskiy
相关产品推荐
相关产品推荐

