Атрибут NetCDF не найден при использовании metpy и сифона для получения данных - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь отобразить некоторые метеорологические данные в формате NetCDF, доступ к которому осуществляется через сифонный пакет Unidata.

Я импортировал то, что предлагают документы MetPy, являются соответствующими библиотеками

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
from netCDF4 import num2date
import numpy as np
import xarray as xr
from siphon.catalog import TDSCatalog
from datetime import datetime

import metpy.calc as mpcalc
from metpy.units import units

, и я построил запрос данных в соответствии с документами сифона

best_gfs = TDSCatalog('http://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/Global_0p25deg/catalog.xml?dataset=grib/NCEP/GFS/Global_0p25deg/Best')

best_ds = best_gfs.datasets[0]
ncss = best_ds.subset()
query = ncss.query()
query.lonlat_box(north=55, south=20, east=-60, west=-90).time(datetime.utcnow())
query.accept('netcdf4')
query.variables('Vertical_velocity_pressure_isobaric','Relative_humidity_isobaric','Temperature_isobaric','u-component_of_wind_isobaric','v-component_of_wind_isobaric','Geopotential_height_isobaric')

data = ncss.get_data(query)

К сожалению, когда я пытаюсь проанализировать набор данных, используя код из документов Metpy

data = data.metpy.parse_cf()

Я получаю сообщение об ошибке: «AttributeError: NetCDF: Атрибут не найден»

При попытке исправить с этой проблемой я наткнулся на другой пост SO , который, похоже, имеет ту же проблему, но предложенное там решение - обновить мою metpy до последней версии - у меня не сработало. Я обновил metpy с помощью Conda, но получил ту же проблему, что и до обновления. Любые другие идеи о том, как решить эту проблему?

1 Ответ

0 голосов
/ 24 марта 2020

Прямо сейчас следующий код в Сифоне

data = ncss.get_data(query)

вернет объект Dataset из netcdf4-python. Вам нужно сделать еще один шаг, чтобы передать это xarray, что сделает доступным MetPy parse_cf:

from xarray.backends import NetCDF4DataStore
ds = xr.open_dataset(NetCDF4DataStore(data))
data = ds.metpy.parse_cf()
...