Python 在xarray中导入和解码数据集以避免冲突的_FillValue和缺少的_value

Python 在xarray中导入和解码数据集以避免冲突的_FillValue和缺少的_value,python,netcdf,python-xarray,Python,Netcdf,Python Xarray,使用xarray open_数据集或open_mfdataset加载NARR netcdf数据集(例如)时,xarray返回一个关于“冲突的_FillValue和缺少的_值”的错误 输入: ds=xarray.open_数据集('air.2m.2010.nc') 产生以下错误: ValueError:(“发现冲突的”FillValue和缺少的值。考虑使用decode\u cf=False打开有问题的数据集,更正属性“,”并使用xray.conventions.decode\u cf(ds)”显式

使用xarray open_数据集或open_mfdataset加载NARR netcdf数据集(例如)时,xarray返回一个关于“冲突的_FillValue和缺少的_值”的错误

输入:

ds=xarray.open_数据集('air.2m.2010.nc')

产生以下错误:

ValueError:(“发现冲突的”FillValue和缺少的值。考虑使用decode\u cf=False打开有问题的数据集,更正属性“,”并使用xray.conventions.decode\u cf(ds)”显式解码)

当使用建议以这样的方式打开时:

ds=xarray.open_数据集('air.2m.2010.nc',decode_cf=False)

数据集已打开,但变量、时间、坐标等未解码(显然)。显式使用
xarray.decode\u cf(ds)
似乎无助于成功解码数据集,因为遇到了相同的错误

我认为出现此错误是因为NARR数据集是Lambert共形数据集,因此在xarray打开网格时,由于网格的形状,存在一些缺少的值,并且由于某些原因,这与填充值冲突

在xarray中打开和解码此文件的最佳方式是什么


注意:我已经能够使用netcdf4 python打开和解码,但我希望能够在xarray中这样做,以利用dask提供的核心外计算功能

我能够解决来自同一来源和xarray的NARR数据的类似问题,但仅针对时间变量。我没有其他变量的问题

我确信有更简单的方法可以做到这一点(我对python+xarray还是相当陌生),但我最终从我感兴趣的数据集中获取了时间变量和值,创建了一个新的数据集并“解码”了时间,然后更新了我感兴趣的原始数据集中的时间变量和值

test = xr.open_mfdataset(r'evap*nc',decode_cf=False)

t_unit = test.variables['time'] 
t_unit.attrs['units']
#u'hours since 1800-1-1 00:00:0.0'

attrs = {'units': 'hours since 1800-01-01'}
ds = xr.Dataset({'time': ('time', t_unit, attrs)})
ds = xr.decode_cf(ds)

test.update({'time':('time', ds['time'])})

如果你能找到更简单的方法,请告诉我!我目前从另一个来源使用的研究数据集没有这个问题,但我想知道其他人是如何用ESRL NARR数据解决这个问题的

此问题已在较新版本的xarray中修复。使用版本0.12,我得到以下信息

ds=xr.open_数据集('air.2m.2010.nc') …/conventions.py:394:SerializationWarning:变量“air”有多个填充值{9.96921e+36,-9.96921e+36},将所有值解码为NaN。 换句话说,它会引发警告,但不会引发错误,并成功地将掩码应用于两个缺少的值

因此,您的问题可以通过升级到更新版本的xarray来解决