xarray - перевыбор данных временных рядов с ежедневного на почасовой - PullRequest
0 голосов
/ 31 января 2019

У меня есть набор данных за год (netCDF) с координатами времени, широты и долготы и переменной KBDI-AWAP, которая выбирается каждый день.

Данные загружаются в набор данных xarray с помощью Python ипечатается как показано ниже:

print(mds_kbdi)

Вывод:

<xarray.Dataset>
Dimensions:    (latitude: 106, longitude: 193, time: 365)
Coordinates:
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
  * time       (time) datetime64[ns] 2017-01-01 2017-01-02 ... 2017-12-31
Data variables:
    KBDI-AWAP  (time, latitude, longitude) float32 dask.array<shape=(365, 106, 193), chunksize=(31, 106, 193)>
Attributes:
    creationTime:        1525760660
    creationTimeString:  Mon May  7 23:24:20 PDT 2018
    Conventions:         COARDS

Укажите это подробно (для каждой широты и долготы):

Date                       KBDI-AWAP 
2017-01-01                 10.5
2017-01-02                 9.2
2017-01-03                 9.8
...                        ...
2017-12-31                 8.2

Я хотел быпересчитать значения KBDI-AWAP с интервалом в час.Таким образом, размер набора данных будет пересчитан (широта: 106, долгота: 193, время: 8760).Каждое значение KBDI-AWAP для часа в пределах одной и той же даты должно иметь то же значение, что и значение даты в исходном наборе данных.

Данные с передискретизацией будут (для каждой широты и долготы):

Date                       KBDI-AWAP 
2017-01-01T00:00:00        10.5
2017-01-01T01:00:00        10.5
2017-01-01T02:00:00        10.5
...
2017-01-02T00:00:00        9.2
2017-01-02T01:00:00        9.2
2017-01-02T02:00:00        9.2
...
2017-01-03T00:00:00        9.8
2017-01-03T01:00:00        9.8
2017-01-03T02:00:00        9.8         
...                        ...
...                        ...
2017-12-31T21:00:00        8.2
2017-12-31T22:00:00        8.2
2017-12-31T23:00:00        8.2

Думая, что я должен использовать функцию resample в наборе данных, я попытался использовать mds_kbdi_hourly = mds_kbdi.resample(time='H'), но это только выводит объект DatasetResample вместо нового набора данных.

Я пробовал и pad (), и ffill() с объектом DatasetResample.Похоже, что переделанные данные пропустили некоторые данные ни по одному из них.Сгенерированные ['time'] координаты:

['2017-01-01T00:00:00.000000000' 
'2017-01-01T01:00:00.000000000' 
'2017-01-01T02:00:00.000000000' ... 
'2017-12-30T22:00:00.000000000' 
'2017-12-30T23:00:00.000000000' 
'2017-12-31T00:00:00.000000000'].

В нем отсутствуют метки времени от 2017-12-31T01:00:00.000000000 до 2017-12-31T23:00:00.000000000.Как решить эту проблему?

1 Ответ

0 голосов
/ 31 января 2019

Вы ищете метод pad или ffill.Например:

mds_kbdi.resample(time='1H').pad()

Метод resample всегда возвращает объект Resample.Объект resample полезен, только если вы примените один из его методов (например, pad).

В документации Xarray перечислены доступные методы повторной выборки: http://xarray.pydata.org/en/stable/api.html#resample-objects

и приведены некоторые примеры их использования здесь: http://xarray.pydata.org/en/stable/time-series.html#resampling-and-grouped-operations

...