Извлечь единственное значение из набора данных Xarray - PullRequest
0 голосов
/ 31 марта 2020

У меня есть набор данных Xarray, содержащий только две части информации: время, на которое ссылается «время», и время, на которое ссылается «время возврата»:

<xarray.Dataset>
Dimensions:  ()
Coordinates:
    reftime  datetime64[ns] 2020-03-31T06:00:00
    time     datetime64[ns] 2020-03-31T12:00:00
    crs      object Projection: latitude_longitude
Data variables:
    *empty*
Attributes:
    Originating_or_generating_Center:                                        ...
    Originating_or_generating_Subcenter:                                     ...
    GRIB_table_version:                                                      ...
    Type_of_generating_process:                                              ...
    Analysis_or_forecast_generating_process_identifier_defined_by_originating...
    Conventions:                                                             ...
    history:                                                                 ...
    featureType:                                                             ...
    History:                                                                 ...
    geospatial_lat_min:                                                      ...
    geospatial_lat_max:                                                      ...
    geospatial_lon_min:                                                      ...
    geospatial_lon_max:                                                      ...

все остальное пусто. Моя цель - получить любую дату, на которую ссылается reftime, в строковом формате. Обычно я понимаю, что это можно сделать, вызвав набор данных ['reftime'], но выгода заключается в том, что этот код предназначен для работы в фоновом режиме, и иногда он находит наборы данных xarray, где на нужное время ссылается 'reftimeX' где X - некоторое число Как извлечь любую информацию, хранящуюся в первой координате (будь то reftime, reftime1 или reftimeX '), чтобы ее можно было сохранить в виде строки?

Я пытался превратить ее в DataArray в надеется, что тогда я смогу превратить его в массив numpy и извлечь из него строку, но когда я пытаюсь превратить его в массив данных:

filtered_dataarray = filtered_ds.to_array()

, я получаю ошибку:

ValueError: at least one array or dtype is required

Документы Xarray предполагают, что для этой функции требуется некоторый self параметр:

Dataset.to_array(self, dim='variable', name=None)

Но до сих пор я не смог понять, к чему это относится.

1 Ответ

2 голосов
/ 01 апреля 2020

Вы можете получить список всех координат в наборе данных следующим образом:

coord_names = list(ds.coords)

Если вы уверены, что нужная вам координата всегда первая, вы можете получить к ней доступ через

ds[coord_names[0]]

Однако я бы предпочел go через координаты и проверить, какое именно имя координаты вы хотите. Учитывая, что вы знаете, что он должен содержать "reftime", вы можете сделать:

reftime_name = [var for var in ds.coords if "reftime" in var][0]
ds[reftime_name]

Метод to_array не делает то, что вы ожидаете. Он будет принимать все переменные данных набора данных и объединять их по новому измерению. Однако ваш набор данных не содержит никаких переменных данных (только координаты), поэтому он выдает ошибку. Аргумент self указывает, что to_array является методом объекта. self является ссылкой на текущий экземпляр класса. Обычно вы вызываете метод объекта (например, ds.to_array()), и тогда вам не нужно явно передавать параметр self (см. Также здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...