присоединиться к XArray сродни Pandas - PullRequest
0 голосов
/ 06 апреля 2020

Означает ли xarray избегать традиционных объединений таблиц, что легко делает Pandas, или я просто не получаю его? Вот простой пример с «левым» набором данных (ds) и «правым» набором данных (other), который я хотел бы объединить в левом соединении:

import xarray as xr

ds = xr.Dataset({"a": ("index", list("xyzxyzxy"))})
other = xr.Dataset({"a": list("xz"), "b": ("a", [1, 2])})

При попытке ds.merge(other), xarray предполагает, что ему нужно больше информации, но как мне сказать, что "a" не должно быть координатой в результате?

MergeError: unable to determine if these variables should be coordinates or not in the merged result: {'a'}

Желаемый результат - это то, чего я добиваюсь с помощью диверсии через Pandas:

>>> ds = ds.to_dataframe()
>>> other = other.to_dataframe()
>>> ds.join(other, on="a").to_xarray()
<xarray.Dataset>
Dimensions:  (index: 8)
Coordinates:
  * index    (index) int64 0 1 2 3 4 5 6 7
Data variables:
    a        (index) object 'x' 'y' 'z' 'x' 'y' 'z' 'x' 'y'
    b        (index) float64 1.0 nan 2.0 1.0 nan 2.0 1.0 nan

непринятые ответы

>>> ds.set_coords("a").merge(other)
<xarray.Dataset>
Dimensions:  (a: 2)
Coordinates:
  * a        (a) <U1 'x' 'z'
Data variables:
    b        (a) int64 1 2
>>> ds.set_coords("a").merge(other, join="left")
<xarray.Dataset>
Dimensions:  (a: 2)
Coordinates:
  * a        (a) <U1 'x' 'z'
Data variables:
    b        (a) int64 1 2

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

a является координатной переменной в other, но переменной данных в ds.

>>> ds

<xarray.Dataset>
Dimensions:  (index: 8)
Dimensions without coordinates: index
Data variables:
    a        (index) <U1 'x' 'y' 'z' 'x' 'y' 'z' 'x' 'y'

>>> other

<xarray.Dataset>
Dimensions:  (a: 2)
Coordinates:
  * a        (a) <U1 'x' 'z'
Data variables:
    b        (a) int64 1 2

Решение состоит в том, чтобы явно сделать a координатной переменной в ds. Мы должны обновить сообщение об ошибке, чтобы предложить это решение

>>> ds.set_coords("a").merge(other)

<xarray.Dataset>
Dimensions:  (a: 2)
Coordinates:
  * a        (a) <U1 'x' 'z'
Data variables:
    b        (a) int64 1 2
0 голосов
/ 09 апреля 2020

Означает ли xarray избегать традиционных объединений таблиц, что легко делает Pandas, или я просто не получаю его?

Использование Pandas, кажется, единственный способ сделать это, в настоящее время. Неясно, планирует ли xarray не реализовывать такого рода объединение.

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