【问题标题】:Simple conversion of netCDF4.Dataset to xarray DatasetnetCDF4.Dataset 到 xarray 数据集的简单转换
【发布时间】:2018-03-08 02:40:49
【问题描述】:

我知道如何手动将 netCDF4.Dataset 转换为 xarray DataArray。但是,我想知道是否有任何简单而优雅的方式,例如使用 xarray 后端,将以下 'netCDF4.Dataset' 对象简单转换为 xarray DataArray 对象:

<type 'netCDF4.Dataset'>
root group (NETCDF4 data model, file format HDF5):
    Originating_or_generating_Center: US National Weather Service, National Centres for Environmental Prediction (NCEP)
    Originating_or_generating_Subcenter: NCEP Ensemble Products
    GRIB_table_version: 2,1
    Type_of_generating_process: Ensemble forecast
    Analysis_or_forecast_generating_process_identifier_defined_by_originating_centre: Global Ensemble Forecast System (GEFS)
    Conventions: CF-1.6
    history: Read using CDM IOSP GribCollection v3
    featureType: GRID
    History: Translated to CF-1.0 Conventions by Netcdf-Java CDM (CFGridWriter2)
Original Dataset = /data/ldm/pub/native/grid/NCEP/GEFS/Global_1p0deg_Ensemble/member/GEFS_Global_1p0deg_Ensemble_20170926_0600.grib2.ncx3#LatLon_181X360-p5S-180p0E; Translation Date = 2017-09-26T17:50:23.259Z
    geospatial_lat_min: 0.0
    geospatial_lat_max: 90.0
    geospatial_lon_min: 0.0
    geospatial_lon_max: 359.0
    dimensions(sizes): time2(2), ens(21), isobaric1(12), lat(91), lon(360)
    variables(dimensions): float32 u-component_of_wind_isobaric_ens(time2,ens,isobaric1,lat,lon), float64 time2(time2), int32 ens(ens), float32 isobaric1(isobaric1), float32 lat(lat), float32 lon(lon), float32 v-component_of_wind_isobaric_ens(time2,ens,isobaric1,lat,lon)
    groups: 

我使用siphon.ncss 得到了这个。

【问题讨论】:

  • 您的问题的标题是否更好:“netCDF4.Dataset 到 xarray.Dataset 的简单转换”?如果是这样,@DopplerShift 有正确的答案。
  • 由于 netCDF4.Dataset 可以包含多个变量,因此无法将其转换为 DataArray...

标签: python netcdf python-xarray python-siphon


【解决方案1】:

xarray 的下一个版本 (0.10) 支持这个东西,或者至少从 netCDF4 获得一个 xarray 数据集,这正是您尝试使用它的原因:

import xarray as xr

nc = nc4.Dataset('filename.nc', mode='r')  # Or from siphon.ncss
dataset = xr.open_dataset(xr.backends.NetCDF4DataStore(nc))

或者使用siphon.ncss,这看起来像:

from datetime import datetime
from siphon.catalog import TDSCatalog
import xarray as xr

gfs_cat = TDSCatalog('http://thredds.ucar.edu/thredds/catalog'
                     '/grib/NCEP/GFS/Global_0p5deg/catalog.xml')
latest = gfs_cat.latest
ncss = latest.subset()
query = ncss.query().variables('Temperature_isobaric')
query.time(datetime.utcnow()).accept('netCDF4')
nc = ncss.get_data(query)
dataset = xr.open_dataset(xr.backends.NetCDF4DataStore(nc))

在它发布之前,您可以从 master 安装 xarray。否则,唯一的其他解决方案是手动完成所有操作。

【讨论】:

  • 是的,当我使用 xarray '0.9.6' 和上面的代码时,我收到了 TypeErrorexpected string or Unicode object, netCDF4.Dataset found。但是,当我使用 xarray '0.9.6-51-g25d1855' 时,我收到 RuntimeError: NetCDF: HDF error 当在 Dataset(tmp_file.name, 'r') 中调用 siphon.ncss 时。你能重现它吗?
  • 我更新了答案以明确显示如何使用siphon.ncss
  • 感谢@DopplerShift 的明确回答。我通过将 h5py 库降级到 2.7.0 解决了 NetCDF: HDF error 的问题。
  • 听起来 h5py 和 netCDF4 是针对不同版本的 HDF5 C 库编译的。
猜你喜欢
  • 2022-06-15
  • 2018-06-20
  • 2022-12-10
  • 2021-06-14
  • 2018-10-11
  • 2021-08-26
  • 2021-05-14
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多