Skip to content

Commit 77a8136

Browse files
committed
BUG: Regression in Series with a multi-index via ix (GH6018)
CLN: Remove references to _SeriesIndexer (vestigial)
1 parent 2f24ff2 commit 77a8136

File tree

4 files changed

+22
-47
lines changed

4 files changed

+22
-47
lines changed

doc/source/release.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,9 @@ Bug Fixes
126126
of pandas in QTConsole, now fixed. If you're using an older version and
127127
need to supress the warnings, see (:issue:`5922`).
128128
- Bug in merging ``timedelta`` dtypes (:issue:`5695`)
129-
- Bug in plotting.scatter_matrix function. Wrong alignment among diagonal
129+
- Bug in plotting.scatter_matrix function. Wrong alignment among diagonal
130130
and off-diagonal plots, see (:issue:`5497`).
131+
- Regression in Series with a multi-index via ix (:issue:`6018`)
131132

132133
pandas 0.13.0
133134
-------------

pandas/core/indexing.py

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ def __getitem__(self, key):
5757

5858
def _get_label(self, label, axis=0):
5959
# ueber-hack
60-
if (isinstance(label, tuple) and
60+
if self.ndim == 1:
61+
return self.obj[label]
62+
elif (isinstance(label, tuple) and
6163
isinstance(label[axis], slice)):
6264

6365
raise IndexingError('no slices here')
@@ -1364,46 +1366,6 @@ def _crit(v):
13641366
return not both_none and (_crit(obj.start) and _crit(obj.stop))
13651367

13661368

1367-
class _SeriesIndexer(_IXIndexer):
1368-
1369-
"""
1370-
Class to support fancy indexing, potentially using labels
1371-
1372-
Notes
1373-
-----
1374-
Indexing based on labels is INCLUSIVE
1375-
Slicing uses PYTHON SEMANTICS (endpoint is excluded)
1376-
1377-
If Index contains int labels, these will be used rather than the locations,
1378-
so be very careful (ambiguous).
1379-
1380-
Examples
1381-
--------
1382-
>>> ts.ix[5:10] # equivalent to ts[5:10]
1383-
>>> ts.ix[[date1, date2, date3]]
1384-
>>> ts.ix[date1:date2] = 0
1385-
"""
1386-
1387-
def _get_label(self, key, axis=0):
1388-
return self.obj[key]
1389-
1390-
def _get_loc(self, key, axis=0):
1391-
return self.obj.values[key]
1392-
1393-
def _slice(self, indexer, axis=0, typ=None):
1394-
return self.obj._get_values(indexer)
1395-
1396-
def _setitem_with_indexer(self, indexer, value):
1397-
1398-
# need to delegate to the super setter
1399-
if isinstance(indexer, dict):
1400-
return super(_SeriesIndexer, self)._setitem_with_indexer(indexer,
1401-
value)
1402-
1403-
# fast access
1404-
self.obj._set_values(indexer, value)
1405-
1406-
14071369
def _check_bool_indexer(ax, key):
14081370
# boolean indexing, need to check that the data are aligned, otherwise
14091371
# disallowed

pandas/core/series.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from pandas.core.index import (Index, MultiIndex, InvalidIndexError,
2929
_ensure_index, _handle_legacy_indexes)
3030
from pandas.core.indexing import (
31-
_SeriesIndexer, _check_bool_indexer, _check_slice_bounds,
31+
_check_bool_indexer, _check_slice_bounds,
3232
_is_index_slice, _maybe_convert_indices)
3333
from pandas.core import generic
3434
from pandas.core.internals import SingleBlockManager
@@ -2473,10 +2473,6 @@ def to_period(self, freq=None, copy=True):
24732473
Series._add_numeric_operations()
24742474
_INDEX_TYPES = ndarray, Index, list, tuple
24752475

2476-
# reinstall the SeriesIndexer
2477-
# defined in indexing.py; pylint: disable=E0203
2478-
Series._create_indexer('ix', _SeriesIndexer)
2479-
24802476
#------------------------------------------------------------------------------
24812477
# Supplementary functions
24822478

pandas/tests/test_indexing.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,22 @@ def test_loc_multiindex(self):
832832
xp = mi_int.ix[4]
833833
assert_frame_equal(rs,xp)
834834

835+
def test_series_getitem_multiindex(self):
836+
837+
# GH 6018
838+
# series regression getitem with a multi-index
839+
840+
s = Series([1,2,3])
841+
s.index = MultiIndex.from_tuples([(0,0),(1,1), (2,1)])
842+
843+
result = s[:,0]
844+
expected = Series([1],index=[0])
845+
assert_series_equal(result,expected)
846+
847+
result = s.ix[:,1]
848+
expected = Series([2,3],index=[1,2])
849+
assert_series_equal(result,expected)
850+
835851
def test_ix_general(self):
836852

837853
# ix general issues

0 commit comments

Comments
 (0)