2 つのデータセットがあり、それぞれに対象となる異なる変数が含まれており、インデックスが不完全 (ただし競合していない) であるとします。
In [1]: import xarray as xr, numpy as np
In [2]: ages = xr.Dataset(
{'ages': (['kid_ids'], np.random.rand((3))*20)},
coords={'kid_names':(['kid_ids'], ['carl','kathy','gail']), 'kid_ids': [10,14,16]})
In [3]: heights = xr.Dataset(
{'heights': (['kid_ids'], np.random.rand((3))*160)},
coords={'kid_names':(['kid_ids'], ['carl','keith','gail']), 'kid_ids': [10,13,16]})
これにより、適切にマージされるように見える 2 つのデータ セットが作成されます。
In [4]: ages
Out[4]:
<xarray.Dataset>
Dimensions: (kid_ids: 3)
Coordinates:
* kid_ids (kid_ids) int32 10 14 16
kid_names (kid_ids) <U5 'carl' 'kathy' 'gail'
Data variables:
ages (kid_ids) float64 13.28 1.955 4.327
In [5]: heights
Out[5]:
<xarray.Dataset>
Dimensions: (kid_ids: 3)
Coordinates:
* kid_ids (kid_ids) int32 10 13 16
kid_names (kid_ids) <U5 'carl' 'keith' 'gail'
Data variables:
heights (kid_ids) float64 115.0 38.2 31.65
しかし、そうではありません-試行ages.merge(heights)
すると次のことが発生しValueError
ます:
ValueError: conflicting value for variable kid_names:
first value: <xarray.Variable (kid_ids: 4)>
array(['carl', nan, 'kathy', 'gail'], dtype=object)
second value: <xarray.Variable (kid_ids: 4)>
array(['carl', 'keith', nan, 'gail'], dtype=object)
座標を削除kid_names
すると問題が解決します。
In [7]: ages.reset_coords('kid_names', drop=True).merge(
heights.reset_coords('kid_names', drop=True))
Out[7]:
<xarray.Dataset>
Dimensions: (kid_ids: 4)
Coordinates:
* kid_ids (kid_ids) int64 10 13 14 16
Data variables:
ages (kid_ids) float64 0.4473 nan 6.45 6.787
heights (kid_ids) float64 78.42 78.43 nan 113.4
座標が のように処理されているように見えますが、DataArrays
値が異なるとエラーが発生します。しかし、2 つのインデックスのスーパーセットに拡張するなど、ベース座標のように扱うべきではありませんか? それとも、私がしなければならない別の操作がありますか?
私はxarray 0.7.2とnumpy 1.10.4を使用してpython 3.5を使用しています