csg*_*136 6 python netcdf python-xarray
当使用xarray open_dataset或open_mfdataset加载NARR netcdf数据集(例如ftp://ftp.cdc.noaa.gov/Datasets/NARR/monolevel/air.2m.2010.nc)时,xarray返回有关“与_FillValue和missing_values”。
输入:
ds = xarray.open_dataset('air.2m.2010.nc')
产生此错误:
ValueError: ('Discovered conflicting _FillValue and missing_value. Considering opening the offending dataset using decode_cf=False, corrected the attributes', 'and decoding explicitly using xray.conventions.decode_cf(ds)')
使用建议打开时:
ds = xarray.open_dataset('air.2m.2010.nc',decode_cf=False),
数据集已打开,但变量,时间,坐标等未解码(显然)。xarray.decode_cf(ds)显式使用似乎无法成功解码数据集,因为会遇到相同的错误。
我相信会出现此错误,因为NARR数据集是Lambert Conformal,因此由于xarray打开网格时的网格形状而导致一些缺失值,并且由于某些原因,这与填充值冲突。
在xarray中打开和解码此文件的最佳方法是什么?
注意:我已经能够使用netcdf4-python打开和解码,但是我希望能够在xarray中执行此操作,以利用dask提供的核心计算功能。
此问题已在最新版本的 xarray 中得到修复。使用版本 0.12,我得到以下内容
>>> ds = xr.open_dataset('air.2m.2010.nc')
.../conventions.py:394: SerializationWarning: variable 'air' has multiple fill values {9.96921e+36, -9.96921e+36}, decoding all values to NaN.
Run Code Online (Sandbox Code Playgroud)
换句话说,它会引发警告,但不会引发错误,并成功将掩码应用于两个缺失值。
因此,您的问题可以通过升级到更新版本的 xarray 来解决。
我能够解决来自相同源和 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'])})
Run Code Online (Sandbox Code Playgroud)
如果您找到更简单的方法,请告诉我!我目前使用的其他来源的研究数据集没有这个问题,但我很好奇其他人如何使用 ESRL NARR 数据解决这个问题。
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |