Missing_value 从 netCDF 文件读取数据时属性丢失?
Missing_value attribute is lost reading data from a netCDF file?
我正在从 NCEP/NCAR 再分析 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,这是我要避免的。
这是 xarray 从 netCDF 读取数据时的默认行为吗?是与否,如何从文件变量中获取这个属性?
附加信息:我正在使用 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
关键字参数。这将关闭将 missing/fill 值转换为 nans。
DataArray.to_masked_array
会将 DataArray
(用 NaN 填充)转换为 numpy.MaskedArray
,用于绘图程序,如 Matplotlib 或 PyNGL。
我正在从 NCEP/NCAR 再分析 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,这是我要避免的。
这是 xarray 从 netCDF 读取数据时的默认行为吗?是与否,如何从文件变量中获取这个属性?
附加信息:我正在使用 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
关键字参数。这将关闭将 missing/fill 值转换为 nans。DataArray.to_masked_array
会将DataArray
(用 NaN 填充)转换为numpy.MaskedArray
,用于绘图程序,如 Matplotlib 或 PyNGL。