Атрибут Missing_value потерян при чтении данных из файла NetCDF?

#python #missing-data #netcdf #python-xarray

#python #отсутствует-данные #netcdf #python-xarray

Вопрос:

Я считываю данные компонентов wind (u и v) из файла NetCDF из NCEP / NCAR Reanalysis 1, чтобы выполнить некоторые вычисления. Я использую xarray для чтения файла.

В одном из вычислений я хотел бы замаскировать все данные ниже некоторого порогового значения, чтобы они были равны атрибуту missing_value . Я не хочу пользоваться услугами Нэн.

Однако при чтении данных с помощью xarray атрибут missing_value, присутствующий в переменной в файле NetCDF, не копируется в xarray.Массив данных, содержащий данные.

Я не смог найти способ скопировать этот атрибут из переменной файла NetCDF с помощью xarray.

Вот пример того, что я пытаюсь сделать:

 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? Да или нет, как я могу получить этот атрибут из переменной file?

Дополнительная информация: я использую PyNGL (http://www.pyngl.ucar.edu /) для создания контурных графиков, и это не работает с NaN.

Спасибо.

Матеус

Ответ №1:

Атрибут «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 преобразует a DataArray (заполненный NAN) в a numpy.MaskedArray для использования в программах построения графиков, таких как Matplotlib или PyNGL.

Комментарии:

1. Спасибо @jhamman, я использовал второе предложение, и оно работает очень хорошо.