Get values (point, vector, array, etc.) from `xr.Dataset` in Xarray ? (Python 3) -


i can't figure out how pull data out of xr.dataset object. can't figure out how access individual values. how can pull values (point values, vectors, arrays, etc.) out of datasets can dataarrays?

np.random.seed(0) da_data = xr.dataarray(np.random.random((3,2,10,100)), dims=["targets","accuracy","metrics","attributes"], name="data") da_data.coords["attributes"] = ["attr_%d"%_ _ in range(100)] # da_data.coords # coordinates: #   * targets     (targets) int64 0 1 2 #   * accuracy    (accuracy) int64 0 1 #   * metrics     (metrics) int64 0 1 2 3 4 5 6 7 8 9 #   * attributes  (attributes) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...  # indexing dataarray #da_data.sel(targets=0, accuracy=0, metrics=0, attributes="attr_5").values #array(0.6458941130666561) float(da_data.sel(targets=0, accuracy=0, metrics=0, attributes="attr_5").values) #0.6458941130666561  # indexing dataset ds_data = da_data.to_dataset() # ds_data # <xarray.dataset> # dimensions:     (accuracy: 2, attributes: 100, metrics: 10, targets: 3) # coordinates: #   * targets     (targets) int64 0 1 2 #   * accuracy    (accuracy) int64 0 1 #   * metrics     (metrics) int64 0 1 2 3 4 5 6 7 8 9 #   * attributes  (attributes) <u7 'attr_0' 'attr_1' 'attr_2' 'attr_3' ... # data variables: #     data        (targets, accuracy, metrics, attributes) float64 0.5488 ...  ds_data.sel(targets=0, accuracy=0, metrics=0, attributes="attr_5").values # <bound method mapping.values of <xarray.dataset> # dimensions:     () # coordinates: #     targets     int64 0 #     accuracy    int64 0 #     metrics     int64 0 #     attributes  <u7 'attr_5' # data variables: #     data        float64 0.6459> float(ds_data.sel(targets=0, accuracy=0, metrics=0, attributes="attr_5").values) # --------------------------------------------------------------------------- # typeerror                                 traceback (most recent call last) # <ipython-input-408-e0c88e8541d8> in <module>() #      38 # data variables: #      39 #     data        float64 0.6459> # ---> 40 float(ds_data.sel(targets=0, accuracy=0, metrics=0, attributes="attr_5").values)  # typeerror: float() argument must string or number, not 'method' 

it's little confusing, .values works differently on dataset , dataarray:

  • dataarray.values returns numpy array. behavior consistent pandas.
  • dataset.values() returns list (python 2) or valuesview (python 3) of dataarray objects constitute dataset. behavior consistent dataset satisfying python's mapping interface.

to pull values out of dataset, need pull out dataarray via dataset's dictionary-like interface, e.g., float(da_data['data']) or float(da_data.values()[0]). can't directly convert dataset float or numpy array, no more python dict.


Comments