【问题标题】:Missing_value attribute is lost reading data from a netCDF file?Missing_value 属性丢失从 netCDF 文件中读取数据?
【发布时间】:2019-09-03 05:02:51
【问题描述】:

我正在从 NCEP/NCAR Reanalysis 1 的 netCDF 文件中读取风分量(u 和 v)数据,以进行一些计算。我正在使用 xarray 来读取文件。

在其中一个计算中,我想屏蔽掉低于某个阈值的所有数据,使它们等于 missing_value 属性。我不想使用 NaN。

但是,当使用 xarray 读取数据时,netCDF 文件的变量中存在的 missing_value 属性不会复制到包含数据的 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

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

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

谢谢。

马特乌斯

【问题讨论】:

    标签: python missing-data netcdf python-xarray


    【解决方案1】:

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

    v850.encoding['missing_value']
    

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

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

    【讨论】:

    • 谢谢@jhamman,我使用了第二个建议,效果很好。
    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2019-10-18
    • 2021-03-13
    • 2021-08-02
    • 1970-01-01
    • 2018-02-10
    • 2020-03-17
    • 2016-03-04
    相关资源
    最近更新 更多