我正在从NCEP / NCAR Reanalysis 1的netCDF文件中读取风成分(u和v)数据,以进行一些计算。我正在使用xarray来读取文件。
在其中一个计算中,我想屏蔽掉一些阈值以下的所有数据,使它们等于missing_value属性。我不想使用NaN的。
但是,使用xarray读取数据时,missing_value属性(存在于netCDF文件中的变量中)不会复制到包含数据的xarray.DataArray。
我找不到使用xarray从netCDF文件变量复制此属性的方法。
这是我正在尝试做的一个例子:
import xarray as xr
import numpy as np
DS1 = xr.open_dataset( "u_250_850_2009012600-2900.nc" )
DS2 = xr.open_dataset( "v_250_850_2009012600-2900.nc" )
u850 = DS1.uwnd.sel( time='2009-01-28 00:00', level=850, lat=slice(10,-60), lon=slice(260,340) )
v850 = DS2.vwnd.sel( time='2009-01-28 00:00', level=850, lat=slice(10,-60), lon=slice(260,340) )
vvel850 = np.sqrt( u850*u850 + v850*v850 )
jet850 = vvel850.where( vvel850 >= 12 )
#jet850 = vvel850.where( vvel850 >= 12, vvel850, vvel850.missing_value )
最后一个注释行是我想要做的:使用missing_value属性来填充vvel850 <12的位置。最后一条未注释的行给了我NaN,我正在努力避免。
从netCDF读取数据时,它是xarray的默认行为吗?无论是否,我如何从文件变量中获取此属性?
另外一个信息:我正在使用PyNGL(http://www.pyngl.ucar.edu/)制作等高线图,它不适用于NaN。
谢谢。
马修
“missing_value”属性保存在encoding
字典中。其他属性如“units”或“standard_name”保存在attrs
字典中。例如:
v850.encoding['missing_value']
您可能还对其他一些可能有助于您的用例的xarray功能感兴趣:
xr.open_dataset
有一个mask_and_scale
关键字参数。这将关闭将缺失/填充值转换为nans。DataArray.to_masked_array
将DataArray
(填充NaNs)转换为numpy.MaskedArray
,用于绘制Matplotlib或PyNGL等绘图程序。