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']. значения немедленные.