diff --git a/doc/whats-new.rst b/doc/whats-new.rst index 4c126196469..f67cf2a7c02 100644 --- a/doc/whats-new.rst +++ b/doc/whats-new.rst @@ -24,6 +24,9 @@ Enhancements Bug fixes ~~~~~~~~~ +- indexing with an empty list creates an object with zero-length axis (:issue:`2882`) + By `Mayeul d'Avezac `_. + .. _whats-new.0.12.1: v0.12.1 (4 April 2019) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index cf6631fa5ba..1a866bf7781 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -8,7 +8,7 @@ from distutils.version import LooseVersion from numbers import Number from typing import ( - Any, Callable, Dict, List, Optional, Set, Tuple, TypeVar, Union) + Any, Callable, Dict, List, Optional, Set, Tuple, TypeVar, Union, Sequence) import numpy as np import pandas as pd @@ -1516,6 +1516,8 @@ def _validate_indexers( v = as_variable(v) elif isinstance(v, Dataset): raise TypeError('cannot use a Dataset as an indexer') + elif isinstance(v, Sequence) and len(v) == 0: + v = IndexVariable((k, ), np.zeros((0,), dtype='int64')) else: v = np.asarray(v) diff --git a/xarray/tests/test_dataarray.py b/xarray/tests/test_dataarray.py index b1ecf160533..58eb6a1d6dc 100644 --- a/xarray/tests/test_dataarray.py +++ b/xarray/tests/test_dataarray.py @@ -501,6 +501,14 @@ def test_getitem_dataarray(self): assert_equal(da[ind], da[[0, 1]]) assert_equal(da[ind], da[ind.values]) + def test_getitem_empty_index(self): + da = DataArray(np.arange(12).reshape((3, 4)), dims=['x', 'y']) + assert_identical(da[{'x': []}], + DataArray(np.zeros((0, 4)), dims=['x', 'y'])) + assert_identical(da.loc[{'y': []}], + DataArray(np.zeros((3, 0)), dims=['x', 'y'])) + assert_identical(da[[]], DataArray(np.zeros((0, 4)), dims=['x', 'y'])) + def test_setitem(self): # basic indexing should work as numpy's indexing tuples = [(0, 0), (0, slice(None, None)),