Python 在xarray中导入和解码数据集以避免冲突的_FillValue和缺少的_value
使用xarray open_数据集或open_mfdataset加载NARR netcdf数据集(例如)时,xarray返回一个关于“冲突的_FillValue和缺少的_值”的错误 输入: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)”显式
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来解决