2017-09-26 5 views
2

Je sais comment convertir netCDF4.Dataset en xarray DataArray manuellement. Cependant, j'aimerais savoir s'il existe une manière simple et élégante, par ex. en utilisant backend xarray, pour la simple conversion des éléments suivants objet 'netCDF4.Dataset' à xarray objet DataArray:Conversion simple de netCDF4.Dataset en xarray Dataset

<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: 

J'ai cela en utilisant siphon.ncss.

+0

Est un meilleur titre pour votre question: "Conversion simple de netCDF4.Dataset en xarray.Dataset"? Si oui, @DopplerShift a la bonne réponse. – jhamman

+0

Puisqu'un netCDF4.Dataset peut contenir plusieurs variables, il ne peut en aucun cas être converti en un DataArray ... – DopplerShift

Répondre

4

La prochaine version de xarray (0,10) a le soutien pour cette chose, ou au moins obtenir un xarray d'un ensemble de données netCDF4 un, pour exactement la raison pour laquelle vous essayez de l'utiliser:

import xarray as xr 

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

Ou avec siphon.ncss, cela ressemblerait à ceci:

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)) 

Jusqu'à sa sortie, vous pouvez installer xarray de maître. Sinon, la seule autre solution consiste à tout faire manuellement.

+0

Oui, quand j'ai utilisé xarray '0.9.6' et le code ci-dessus j'ai reçu ** TypeError **: 'Chaîne attendue ou objet Unicode, netCDF4.Dataset trouvé'. Cependant, quand j'ai utilisé xarray '0.9.6-51-g25d1855', j'ai reçu ** RuntimeError **: 'NetCDF: HDF error' quand' Dataset (tmp_file.name, 'r') 'a été appelé dans' siphon.ncss '. Pouvez-vous le reproduire? – Ales

+0

J'ai mis à jour la réponse pour montrer explicitement comment utiliser avec 'siphon.ncss'. – DopplerShift

+0

Ce lien vers le portable ne fonctionne pas pour moi. – DopplerShift