python - 从 netCDF 文件读取数据时 Missing_value 属性丢失?

标签 python missing-data netcdf python-xarray

我正在从 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,这是我试图避免的。

这是 xarray 从 netCDF 读取数据时的默认行为吗?不管是与否,我如何从文件变量中获取这个属性?

附加信息:我正在使用 PyNGL ( http://www.pyngl.ucar.edu/ ) 来绘制等值线图,但它不适用于 NaN。

谢谢。

马特乌斯

最佳答案

“missing_value”属性保存在 encoding 字典中。其他属性(例如“units”或“standard_name”)保存在 attrs 字典中。例如:

v850.encoding['missing_value']

您可能还对一些可能对您的用例有所帮助的其他 xarray 功能感兴趣:

  1. xr.open_dataset 有一个 mask_and_scale 关键字参数。这将关闭将缺失/填充值转换为 nan。
  2. DataArray.to_masked_array 会将 DataArray(用 NaN 填充)转换为 numpy.MaskedArray,以用于 Matplotlib 或 PyNGL 等绘图程序.

关于python - 从 netCDF 文件读取数据时 Missing_value 属性丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55651483/

相关文章:

python - 如果网络资源处于自定义子网模式,网络接口(interface)必须指定一个子网

Python 2.7 : Tkinter, bind方法如何使用?

python-3.x - 删除具有高缺失值的列

python - NetCDF 和 Python : Finding the closest lon/lat index given actual lon/lat values

python - 基于 bool 逻辑创建数组

python 使用 pool.map_async 时没有输出

r - 使用 ARIMA 模型估算缺失值

r - 列表删除给定列中具有 NA 的行

python - 合并大量 netCDF 文件

python - 使用纬度经度坐标从卫星图像获取最近的像素值