Skip to content

Convert to xarray #933

@davidhassell

Description

@davidhassell

It would be nice to be able to convert cf.Field, cf.Domain, cf.FieldList, cf.DomainList constructs to xarray datasets in memory.

E.g.

>>> import cf
>>> f = cf.example_field(0)
>>> ds = f.to_xarray()
>>> ds
<xarray.Dataset> Size: 640B
Dimensions:   (lat: 5, lon: 8, bounds2: 2)
Coordinates:
  * lat       (lat) float64 40B -75.0 -45.0 0.0 45.0 75.0
  * lon       (lon) float64 64B 22.5 67.5 112.5 157.5 202.5 247.5 292.5 337.5
    time      float64 8B dask.array<chunksize=(), meta=np.ndarray>
Dimensions without coordinates: bounds2
Data variables:
    lat_bnds  (lat, bounds2) float64 80B dask.array<chunksize=(5, 2), meta=np.ndarray>
    lon_bnds  (lon, bounds2) float64 128B dask.array<chunksize=(8, 2), meta=np.ndarray>
    q         (lat, lon) float64 320B dask.array<chunksize=(5, 8), meta=np.ndarray>
Attributes:
    Conventions:  CF-1.13
>>>
>>> f.nc_set_variable('/forecast/model/q')
>>> ds = f.to_xarray()
>>> ds 
<xarray.DataTree>
Group: /Dimensions:   (lat: 5, lon: 8, bounds2: 2)
│   Coordinates:
│     * lat       (lat) float64 40B -75.0 -45.0 0.0 45.0 75.0* lon       (lon) float64 64B 22.5 67.5 112.5 157.5 202.5 247.5 292.5 337.5time      float64 8B dask.array<chunksize=(), meta=np.ndarray>Dimensions without coordinates: bounds2Data variables:
│       lat_bnds  (lat, bounds2) float64 80B dask.array<chunksize=(5, 2), meta=np.ndarray>lon_bnds  (lon, bounds2) float64 128B dask.array<chunksize=(8, 2), meta=np.ndarray>Attributes:
│       Conventions:  CF-1.13
└── Group: /forecast
    └── Group: /forecast/model
            Dimensions:  (lat: 5, lon: 8)
            Data variables:
                q        (lat, lon) float64 320B dask.array<chunksize=(5, 8), meta=np.ndarray>
>>>
>>> ds = cf.write(f, fmt='XARRAY')
>>> ds
<xarray.DataTree>
Group: /Dimensions:   (lat: 5, lon: 8, bounds2: 2)
│   Coordinates:
│     * lat       (lat) float64 40B -75.0 -45.0 0.0 45.0 75.0* lon       (lon) float64 64B 22.5 67.5 112.5 157.5 202.5 247.5 292.5 337.5time      float64 8B dask.array<chunksize=(), meta=np.ndarray>Dimensions without coordinates: bounds2Data variables:
│       lat_bnds  (lat, bounds2) float64 80B dask.array<chunksize=(5, 2), meta=np.ndarray>lon_bnds  (lon, bounds2) float64 128B dask.array<chunksize=(8, 2), meta=np.ndarray>Attributes:
│       Conventions:  CF-1.13
└── Group: /forecast
    └── Group: /forecast/model
            Dimensions:  (lat: 5, lon: 8)
            Data variables:
                q        (lat, lon) float64 320B dask.array<chunksize=(5, 8), meta=np.ndarray>
>>>

See also NCAS-CMS/cfdm#394

Metadata

Metadata

Assignees

No one assigned

    Labels

    dataset writeRelating to writing datasetsenhancementNew feature or requestxarrayRelated to xarray datasets

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions