diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 076b97e8623..e1628d7aac9 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -5139,7 +5139,7 @@ def filter_by_attrs(self, **kwargs): """ # noqa selection = [] - for var_name, variable in self.data_vars.items(): + for var_name, variable in self.variables.items(): has_value_flag = False for attr_name, pattern in kwargs.items(): attr_value = variable.attrs.get(attr_name) diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index 55358e47e41..fefea0eb08c 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4920,7 +4920,7 @@ def test_filter_by_attrs(self): "temperature_10": (["t"], [0], temp10), "precipitation": (["t"], [0], precip), }, - coords={"time": (["t"], [0], dict(axis="T"))}, + coords={"time": (["t"], [0], dict(axis="T", long_name="time_in_seconds"))}, ) # Test return empty Dataset. @@ -4934,6 +4934,11 @@ def test_filter_by_attrs(self): assert_equal(new_ds["precipitation"], ds["precipitation"]) + # Test filter coordinates + new_ds = ds.filter_by_attrs(long_name="time_in_seconds") + assert new_ds["time"].long_name == "time_in_seconds" + assert not bool(new_ds.data_vars) + # Test return more than one DataArray. new_ds = ds.filter_by_attrs(standard_name="air_potential_temperature") assert len(new_ds.data_vars) == 2