From 86b920ac931c9a78b067e08a84e3c587ec905047 Mon Sep 17 00:00:00 2001 From: Benoit Bovy Date: Sun, 20 Mar 2022 22:10:03 +0100 Subject: [PATCH] reindex: fix missing variable metadata --- xarray/core/dataset.py | 7 +++++++ xarray/tests/test_dataset.py | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 155cf21b4db..093f2e5a58b 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -2543,6 +2543,13 @@ def _reindex_callback( new_variables = variables.copy() new_indexes = indexes.copy() + # re-assign variable metadata + for name, new_var in new_variables.items(): + var = self._variables.get(name) + if var is not None: + new_var.attrs = var.attrs + new_var.encoding = var.encoding + # pass through indexes from excluded dimensions # no extra check needed for multi-coordinate indexes, potential conflicts # should already have been detected when aligning the indexes diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index 96fa4ef144e..f37007a06e3 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -1878,6 +1878,19 @@ def test_reindex(self): actual = ds.reindex(x=[0, 1, 3], y=[0, 1]) assert_identical(expected, actual) + def test_reindex_attrs_encoding(self): + ds = Dataset( + {"data": ("x", [1, 2, 3])}, + {"x": ("x", [0, 1, 2], {"foo": "bar"}, {"bar": "baz"})}, + ) + actual = ds.reindex(x=[0, 1]) + expected = Dataset( + {"data": ("x", [1, 2])}, + {"x": ("x", [0, 1], {"foo": "bar"}, {"bar": "baz"})}, + ) + assert_identical(actual, expected) + assert actual.x.encoding == expected.x.encoding + def test_reindex_warning(self): data = create_test_data()