Как эффективно извлечь серию Pandas из Xarray? - PullRequest
0 голосов
/ 11 марта 2020

Xarray newb ie вопрос здесь.

Я ищу эффективный (быстрый и малый объем памяти) способ извлечь временной ряд из Xarray.

У меня есть набор данных, содержащий один год климатической информации, из которой я извлекаю один атрибут ('t2m') в Xarray. Затем я интерполирую в определенной позиции (широте и долготе) и записываю ее в кадр данных:

ds = xr.open_mfdataset(f_name)
da_all = ds.t2m
d_locs = {'longitude':float(lon), 'latitude':float(lat)}
da_city = da_all.interp(coords=d_locs, method='linear')
df = da_city.to_dataframe()

Структура da_city:

<xarray.DataArray 't2m' (time: 365)>
dask.array<shape=(365,), dtype=float32, chunksize=(365,)>
Coordinates:
  * time          (time) datetime64[ns] 1979-01-01T11:30:00 ... 1979-12-31T11:30:00
    day_of_month  (time) int64 dask.array<shape=(365,), chunksize=(365,)>
    month         (time) int64 dask.array<shape=(365,), chunksize=(365,)>
    year          (time) int64 dask.array<shape=(365,), chunksize=(365,)>
    longitude     float64 24.5
    latitude      float64 10.5
Attributes:
    long_name:     2 metre temperature
    units:         K
    cell_methods:  day_of_month: month: year: mean

Это работает, но это занимает минута, чтобы вернуть 365-длинный, 6-кадровый фрейм данных.

Я подозреваю, что причина в том, что метод to_dataframe () создает обширный, многоуровневый индексированный фрейм данных, который я немедленно нарезаю!

Есть ли простой способ нарезать da перед вызовом метода to_dataframe ()? Я думал что-то вроде:

df = da_city['t2m'].to_dataframe()

, но это терпит неудачу, потому что у da нет элемента 't2m'.

Кто-нибудь знает правильный синтаксис для использования здесь? Я уверен, что есть простой и очевидный способ сделать это, но я не могу его найти. Спасибо.

Обновление:

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

da_time = da_city['time'].values
da_vals = da_city.values
ts = pd.Series(data=da_vals, index=da_time, name='t2m')

но получение da_city.values ​​снова очень медленно. da_city ['time']. значения немедленные.

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