Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Missing_value attribute is lost reading data from a netCDF file?

I'm reading wind components (u and v) data from a netCDF file from NCEP/NCAR Reanalysis 1 to make some computations. I'm using xarray to read the file.

In one of the computations, I'd like to mask out all data below some threshould, make them be equal to the missing_value attribute. I don't want to use NaN's.

However, when reading the data with xarray, the missing_value attribute - present in the variable in the netCDF file - isn't copied to xarray.DataArray that contained the data.

I couldn't find a way to copy this attribute from netCDF file variable, with xarray.

Here is an example of what I'm trying to do:

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 )

The last commented line is what I want to do: to use missing_value attribute to fill where vvel850 < 12. The last uncommented line gives me NaN's, what I'm trying to avoid.

Is it the default behaviour of xarray when reading data from netCDF? Whether yes or not, how could I get this attribute from file variable?

An additional information: I'm using PyNGL (http://www.pyngl.ucar.edu/) to make contour plots and it doesn't work with NaN's.

Thanks.

Mateus

like image 282
Mateus da Silva Teixeira Avatar asked Feb 15 '26 05:02

Mateus da Silva Teixeira


1 Answers

The "missing_value" attribute is kept in the encoding dictionary. Other attributes like "units" or "standard_name" are kept in the attrs dictionary. For example:

v850.encoding['missing_value']

You may also be interested a few other xarray features that may help your use case:

  1. xr.open_dataset has a mask_and_scale keyword argument. This will turn off converting missing/fill values to nans.
  2. DataArray.to_masked_array will convert a DataArray (filled with NaNs) to a numpy.MaskedArray for use in plotting programs like Matplotlib or PyNGL.
like image 66
jhamman Avatar answered Feb 17 '26 19:02

jhamman