Организация ежедневных данных Excel в наборе данных xarray

Скажем, я хочу использовать xarray для работы с некоторыми ежедневными данными о погоде, организованными аналогично этому примеру из документации xarray:

Однако данные предоставляются мне в нескольких файлах Excel, где каждый файл содержит данные за один день. Имена файлов содержат информацию о дате, а внутри файлы выглядят как этот игрушечный пример:

X  Y  Temp  Prec
1  1    21    34
1  2    24    4
1  3    22    35
2  1    23    36

Я могу читать файлы в фреймах данных pandas:

for f in files:
  datestring = f.split('.')[0]
  date = datetime.strptime(datestring, '%Y%m%d')

  df = pd.read_excel(f, 0)
  df['Date'] = date

Я могу создать большой фрейм данных со всеми данными (dfAll.append(df)) и конвертировать между фреймами данных и наборами данных (xr.Dataset.from_dataframe(df)). Однако я не могу переиндексировать и организовать свой набор данных, как показано на изображении. Мой набор данных выглядит следующим образом:

<xarray.Dataset>
Dimensions:       (index: 120)
Coordinates:
  * index         (index) int64 106 107 108 109 ...
Data variables:
    X             (index) float64 1 1 1 2 ...
    Y             (index) float64 1 2 3 1 ...
    Temp          (index) float64 21 24 22 23 ...
    Prec          (index) float64 34 40 35 36 ...
    Date          (index) datetime64[ns] 2017-01-02 2017-01-02 2017-01-02 ...

Как я могу реорганизовать свои данные, как в примере? Какие операции нужно делать в пандах, а какие в xarray? В основном я хотел бы иметь дату, X и Y в качестве меток, а данные Temp и Prec - в качестве переменных.


person mbaytas    schedule 28.01.2017    source источник


Ответы (1)


Чтобы xarray.Dataset.from_dataframe поступал правильно, вам нужно добавить столбцы, которые вы хотите преобразовать в измерения, в MultiIndex в DataFrame.

В вашем примере попробуйте: xarray.Dataset.from_dataframe(df.set_index(['X', 'Y', 'Date']).

person shoyer    schedule 28.01.2017
comment
У меня проблема, похожая на эту, не могли бы вы мне помочь? Вот мой вопрос: stackoverflow.com/q/58358170/5838180 - person NeStack; 14.10.2019