переназначение переменной данных xarray на координату xarray - PullRequest
1 голос
/ 10 января 2020

У меня есть pandas массив данных пространственных данных, который я хотел бы преобразовать в netCDF. Я нашел способ xarray и преобразовал свой фрейм данных в набор данных xarray:

# create xray Dataset from Pandas DataFrame
xr = xarray.Dataset.from_dataframe(df)

Теперь я хочу установить переменные lon и lat в качестве координат моего набора данных xarray. Я пытался xarray.Dataset.assign_coords, но, кажется, не могу заставить его работать?

Мой набор данных xarray выглядит так:

<xarray.Dataset>
Dimensions:  (index: 58705)
Coordinates:
  * index    (index) int64 0 1 2 3 4 5 6 ... 58699 58700 58701 58702 58703 58704
Data variables:
    x_km     (index) float64 5.274e+03 5.273e+03 ... 2.873e+03 2.873e+03
    y_km     (index) float64 0.0 46.02 92.03 138.0 ... -75.23 -50.15 -25.07 -0.0
    z_km     (index) float64 3.575e+03 3.575e+03 ... 1.947e+03 1.947e+03
    dv_v     (index) float64 0.2407 0.1774 0.1786 ... -0.2163 -0.2035 -0.3197
    rxy      (index) float64 5.274e+03 5.273e+03 ... 2.873e+03 2.873e+03
    lon      (index) float64 0.0 0.5 1.0 1.5 2.0 ... -2.0 -1.5 -1.0 -0.5 -0.0
    lat      (index) float64 34.13 34.13 34.13 34.13 ... 34.11 34.12 34.12 34.13
    rxyz     (index) float64 6.371e+03 6.371e+03 ... 3.471e+03 3.471e+03
    depth    (index) float64 0.04665 0.04747 0.04766 ... 2.9e+03 2.9e+03 2.9e+03
Attributes:
    Conventions:  CF-1.6
    title:        Data
    summary:      Data generated

Любая помощь приветствуется: D

1 Ответ

3 голосов
/ 10 января 2020

Начиная с Dataset, называемого ds, который выглядит следующим образом:

Dimensions:  (index: 10)
Coordinates:
  * index    (index) int64 0 1 2 3 4 5 6 7 8 9
Data variables:
    dv_v     (index) int64 5 14 6 1 19 12 16 10 0 11
    rxy      (index) int64 15 8 6 2 0 1 4 16 7 19
    lon      (index) int64 15 7 9 17 18 1 12 2 6 8
    lat      (index) int64 6 8 5 17 15 16 9 19 11 14
    rxyz     (index) int64 15 17 18 5 14 13 16 2 10 9
    depth    (index) int64 11 18 5 19 3 14 7 17 0 4

Вы можете преобразовать lat и lon в координаты с помощью ds.set_coordinates(("lat", "lon")). Результатом будет следующее:

Dimensions:  (index: 10)
Coordinates:
  * index    (index) int64 0 1 2 3 4 5 6 7 8 9
    lon      (index) int64 15 7 9 17 18 1 12 2 6 8
    lat      (index) int64 6 8 5 17 15 16 9 19 11 14
Data variables:
    dv_v     (index) int64 5 14 6 1 19 12 16 10 0 11
    rxy      (index) int64 15 8 6 2 0 1 4 16 7 19
    rxyz     (index) int64 15 17 18 5 14 13 16 2 10 9
    depth    (index) int64 11 18 5 19 3 14 7 17 0 4

Другой аналогичной (но не эквивалентной) альтернативой является использование ds.set_index(index=("lat", "lon")), который изменит index до многоуровневого индекса с индексами lat и lon. Вывод будет следующим:

Dimensions:  (index: 10)
Coordinates:
  * index    (index) MultiIndex
  - lat      (index) int64 6 8 5 17 15 16 9 19 11 14
  - lon      (index) int64 15 7 9 17 18 1 12 2 6 8
Data variables:
    dv_v     (index) int64 5 14 6 1 19 12 16 10 0 11
    rxy      (index) int64 15 8 6 2 0 1 4 16 7 19
    rxyz     (index) int64 15 17 18 5 14 13 16 2 10 9
    depth    (index) int64 11 18 5 19 3 14 7 17 0 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...