Reading data from objects

[1]:
import numpy as np
import xarray as xr

import earthkit.data as ekd

We can read Python objects into an earthkit-data object using from_object().

First, we create Numpy and Xarray input data.

[2]:
# demo ndarray
demo_ndarray = np.random.rand(10, 10) * 10.0
demo_lats = np.arange(0, 91, 10)
demo_lons = np.arange(0, 91, 10)

# demo Xarray
demo_da = xr.DataArray(
    demo_ndarray,
    name="temperature",
    dims={"latitude": demo_lats, "longitude": demo_lons},
    attrs={"units": "Celsius", "standard_name": "air_temperature"},
)
demo_ds = demo_da.to_dataset().assign_attrs({"purpose": "Demonstration", "source": "EarthkitExamples"})

demo_ds
[2]:
<xarray.Dataset> Size: 800B
Dimensions:      (latitude: 10, longitude: 10)
Dimensions without coordinates: latitude, longitude
Data variables:
    temperature  (latitude, longitude) float64 800B 3.582 7.83 ... 5.611 8.344
Attributes:
    purpose:  Demonstration
    source:   EarthkitExamples

Numpy input

[3]:
d = ekd.from_object(demo_ndarray)
d
[3]:
Numpy ndarray

typesnumpy, array, xarray
[4]:
d.to_numpy()
[4]:
array([[3.58239996, 7.82952525, 7.16446508, 2.45455418, 2.51743456,
        8.7466854 , 8.39202894, 1.48241861, 4.18474628, 0.94557965],
       [2.19310807, 2.76649207, 8.68856398, 1.20906689, 5.63218275,
        7.05900755, 1.38402142, 6.36558534, 7.54561089, 0.33634944],
       [7.78479759, 9.92776192, 1.63048253, 1.93581213, 8.22070832,
        3.60894429, 0.58851499, 2.97581417, 3.36072416, 1.92186047],
       [4.02714977, 0.64611663, 4.97723198, 5.96535124, 0.96764506,
        2.90902311, 5.46981587, 0.21649453, 8.02339109, 6.70736337],
       [0.0934673 , 1.04057399, 6.11501719, 2.02902052, 9.28022957,
        8.33913653, 4.95151308, 6.05864839, 7.9953914 , 0.80303781],
       [1.17101096, 1.28359041, 6.1667969 , 4.27254808, 2.31924362,
        6.58375093, 9.39323667, 2.96271812, 9.14626319, 8.13418819],
       [1.48497286, 9.95270836, 8.39722797, 8.24838608, 1.37304124,
        3.35725063, 0.51897333, 9.31637346, 7.05903085, 6.0759565 ],
       [5.36164705, 7.54945446, 1.5477877 , 3.70636708, 0.26129773,
        7.57590019, 7.92360869, 9.89528306, 6.61410484, 1.52168687],
       [9.91601807, 7.20307348, 2.52454033, 1.21089167, 5.57766104,
        4.08519214, 1.31204341, 0.44453396, 5.58328631, 0.8496902 ],
       [8.80126644, 5.1888672 , 5.27665322, 8.59729147, 6.33045073,
        3.76713045, 3.21542184, 2.63099394, 5.61083501, 8.34354129]])

Xarray input

[5]:
d = ekd.from_object(demo_da)
d
[5]:
Xarray DataArray

typesxarray, pandas, fieldlist, numpy, array
[6]:
d.to_xarray()
[6]:
<xarray.DataArray 'temperature' (latitude: 10, longitude: 10)> Size: 800B
array([[3.58239996, 7.82952525, 7.16446508, 2.45455418, 2.51743456,
        8.7466854 , 8.39202894, 1.48241861, 4.18474628, 0.94557965],
       [2.19310807, 2.76649207, 8.68856398, 1.20906689, 5.63218275,
        7.05900755, 1.38402142, 6.36558534, 7.54561089, 0.33634944],
       [7.78479759, 9.92776192, 1.63048253, 1.93581213, 8.22070832,
        3.60894429, 0.58851499, 2.97581417, 3.36072416, 1.92186047],
       [4.02714977, 0.64611663, 4.97723198, 5.96535124, 0.96764506,
        2.90902311, 5.46981587, 0.21649453, 8.02339109, 6.70736337],
       [0.0934673 , 1.04057399, 6.11501719, 2.02902052, 9.28022957,
        8.33913653, 4.95151308, 6.05864839, 7.9953914 , 0.80303781],
       [1.17101096, 1.28359041, 6.1667969 , 4.27254808, 2.31924362,
        6.58375093, 9.39323667, 2.96271812, 9.14626319, 8.13418819],
       [1.48497286, 9.95270836, 8.39722797, 8.24838608, 1.37304124,
        3.35725063, 0.51897333, 9.31637346, 7.05903085, 6.0759565 ],
       [5.36164705, 7.54945446, 1.5477877 , 3.70636708, 0.26129773,
        7.57590019, 7.92360869, 9.89528306, 6.61410484, 1.52168687],
       [9.91601807, 7.20307348, 2.52454033, 1.21089167, 5.57766104,
        4.08519214, 1.31204341, 0.44453396, 5.58328631, 0.8496902 ],
       [8.80126644, 5.1888672 , 5.27665322, 8.59729147, 6.33045073,
        3.76713045, 3.21542184, 2.63099394, 5.61083501, 8.34354129]])
Dimensions without coordinates: latitude, longitude
Attributes:
    units:          Celsius
    standard_name:  air_temperature
[7]:
d.to_pandas()
[7]:
temperature
latitude longitude
0 0 3.582400
1 7.829525
2 7.164465
3 2.454554
4 2.517435
... ... ...
9 5 3.767130
6 3.215422
7 2.630994
8 5.610835
9 8.343541

100 rows × 1 columns

[8]:
d = ekd.from_object(demo_ds)
d
[8]:
Xarray Dataset

typesxarray, pandas, fieldlist, numpy, array
[9]:
d.to_xarray()
[9]:
<xarray.Dataset> Size: 800B
Dimensions:      (latitude: 10, longitude: 10)
Dimensions without coordinates: latitude, longitude
Data variables:
    temperature  (latitude, longitude) float64 800B 3.582 7.83 ... 5.611 8.344
Attributes:
    purpose:  Demonstration
    source:   EarthkitExamples
[10]:
d.to_pandas()
[10]:
temperature
latitude longitude
0 0 3.582400
1 7.829525
2 7.164465
3 2.454554
4 2.517435
... ... ...
9 5 3.767130
6 3.215422
7 2.630994
8 5.610835
9 8.343541

100 rows × 1 columns