2017-09-26 7 views
2

Ich weiß, wie netCDF4.Dataset manuell in xarray DataArray konvertieren. Ich würde jedoch gerne wissen, ob es einen einfachen und eleganten Weg gibt, z.B. xarray Backend verwenden, für die einfache Umwandlung des folgenden ‚netCDF4.Dataset‘ Objekt xarray Dataarray Objekt:Einfache Konvertierung von netCDF4.Dataset in 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: 

ich dies mit siphon.ncss haben.

+0

Ist ein besserer Titel für Ihre Frage: "Einfache Konvertierung von netCDF4.Dataset zu xarray.Dataset"? Wenn ja, hat @DopplerShift die richtige Antwort. – jhamman

+0

Da ein netCDF4.Dataset mehrere Variablen enthalten kann, gibt es keine Möglichkeit, es einfach in ein DataArray zu konvertieren ... – DopplerShift

Antwort

4

Die nächste Version von xarray (0,10) hat Unterstützung für diese sehr Sache, oder zumindest eine xarray Dataset von einem netCDF4 ein, aus genau dem Grund bekommen Sie versuchen, es zu benutzen:

import xarray as xr 

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

Oder mit siphon.ncss, würde dies wie folgt aussehen:

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

Bis es freigegeben ist, können Sie von Master installieren xarray könnte. Ansonsten ist die einzige andere Lösung, alles manuell zu erledigen.

+0

Ja, wenn ich xarray '0.9.6' verwendet habe und der obige Code ** TypeError **: 'erwartetes Zeichen- oder Unicode-Objekt, netCDF4.Dataset found'. Wenn ich jedoch xarray '0.9.6-51-g25d1855' verwendet habe, erhielt ich ** RuntimeError **: 'NetCDF: HDF error', wenn' Dataset (tmp_file.name, 'r') 'in' siphon.ncss aufgerufen wurde '. Kannst du es reproduzieren? – Ales

+0

Ich aktualisierte die Antwort, um explizit zu zeigen, wie man mit 'siphon.ncss' benutzt. – DopplerShift

+0

Dieser Link zum Notebook funktioniert nicht für mich. – DopplerShift