我尝试通过运行来保存
xr.dataset
,例如:
ds.to_netcdf('save/directory/filename.nc')
并出现错误:
Variable 'lat' has conflicting _FillValue (nan) and missing_value (-9999.0). Cannot encode data.
我该如何解决这个错误?
这些可能是属性。您可以使用
ds.lat.attrs
查看变量的属性。
可以像字典一样访问属性的元素来直接修改属性:
ds.lat.attrs['missing_value'] = np.nan
或者删除其中一个
del ds.lat.attrs['_FillValue']
如果您的 data 实际上同时具有 NaN 和 -9999 作为填充值,并且您只想使用其中一个,您也可以屏蔽数据。我猜测 -9999 被选择用于整数数据?
对于整数数据,
NaN
不是一个选项,因此我们将坚持使用-9999,并强制为 32 位整数作为示例:
ds['lat'] = ds['lat'].where(pd.notnull(ds['lat']), -9999).astype('int32')
对于浮动,我们可以坚持使用
np.nan
:
ds['lat'] = ds['lat'].where(ds['lat'] != -9999)
不确定这是否与这样一个老问题相关,但我在寻找相关问题的解释时发现了 xarray 中这个已确认的错误:
https://github.com/pydata/xarray/issues/7722
当前未解决的问题似乎解释了上面针对我自己的用例的类型错误消息。