diff --git a/doc/source/release.rst b/doc/source/release.rst index 7ee3bdddce2ad..66fe5a353f1ca 100644 --- a/doc/source/release.rst +++ b/doc/source/release.rst @@ -81,6 +81,7 @@ Bug Fixes - Bug in isnull handling ``NaT`` in an object array (:issue:`5443`) - Bug in ``to_datetime`` when passed a ``np.nan`` or integer datelike and a format string (:issue:`5863`) - Bug in groupby dtype conversion with datetimelike (:issue:`5869`) + - Regresssion in handling of empty Series as indexers to Series (:issue:`5877`) pandas 0.13.0 ------------- diff --git a/pandas/core/common.py b/pandas/core/common.py index 4e964b2576845..fc0532364eb42 100644 --- a/pandas/core/common.py +++ b/pandas/core/common.py @@ -1660,7 +1660,7 @@ def _is_bool_indexer(key): if key.dtype == np.object_: key = np.asarray(_values_from_object(key)) - if len(key) and not lib.is_bool_array(key): + if not lib.is_bool_array(key): if isnull(key).any(): raise ValueError('cannot index with vector containing ' 'NA / NaN values') diff --git a/pandas/tests/test_series.py b/pandas/tests/test_series.py index e8b421608fc0a..5a4cbf1a6e16e 100644 --- a/pandas/tests/test_series.py +++ b/pandas/tests/test_series.py @@ -16,6 +16,7 @@ from pandas import (Index, Series, DataFrame, isnull, notnull, bdate_range, date_range, _np_version_under1p7) from pandas.core.index import MultiIndex +from pandas.core.indexing import IndexingError from pandas.tseries.index import Timestamp, DatetimeIndex import pandas.core.config as cf import pandas.lib as lib @@ -795,6 +796,28 @@ def test_getitem_boolean_empty(self): self.assertEqual(s.index.name, 'index_name') self.assertEqual(s.dtype, np.int64) + # GH5877 + # indexing with empty series + s = Series(['A', 'B']) + expected = Series(np.nan,index=['C'],dtype=object) + result = s[Series(['C'], dtype=object)] + assert_series_equal(result, expected) + + s = Series(['A', 'B']) + expected = Series(dtype=object) + result = s[Series([], dtype=object)] + assert_series_equal(result, expected) + + # invalid because of the boolean indexer + # that's empty or not-aligned + def f(): + s[Series([], dtype=bool)] + self.assertRaises(IndexingError, f) + + def f(): + s[Series([True], dtype=bool)] + self.assertRaises(IndexingError, f) + def test_getitem_generator(self): gen = (x > 0 for x in self.series) result = self.series[gen]