在 xarray 中导入和解码数据集以避免冲突 _FillValue 和 missing_value

Posted

技术标签:

【中文标题】在 xarray 中导入和解码数据集以避免冲突 _FillValue 和 missing_value【英文标题】:Importing and decoding dataset in xarray to avoid conflicting _FillValue and missing_value 【发布时间】:2016-05-18 20:03:17 【问题描述】:

当使用 xarray open_dataset 或 open_mfdataset 加载 NARR netcdf 数据集(例如ftp://ftp.cdc.noaa.gov/Datasets/NARR/monolevel/air.2m.2010.nc)时,xarray 返回有关“冲突 _FillValue 和缺失值”的错误。

输入:

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 提供的核心计算功能。

【问题讨论】:

【参考方案1】:

我能够解决我在使用来自同一源和 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 数据解决这个问题。

【讨论】:

【参考方案2】:

此问题已在更新的 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.

换句话说,它会引发警告,但不会引发错误,并成功地将掩码应用于两个缺失值。

所以您的问题可以通过升级到更新版本的 xarray 来解决。

【讨论】:

以上是关于在 xarray 中导入和解码数据集以避免冲突 _FillValue 和 missing_value的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit learn 在 Python 中导入数据集以解决机器学习问题数据集 Wisconsin Breast Cancer

如何使用python在机器人框架中导入和使用用户定义的类

在backbone.js项目中导入和使用javascript库

如何使用 Blazor 框架在前端浏览器中导入和导出 Excel

在反应中导入和导出模块

如何在 Vue 单文件组件中导入和使用图片?