Skip to content

Commit e47bf26

Browse files
committed
BUG: fix indexing ambiguity with MultiIndex close pandas-dev#1678
1 parent fc92170 commit e47bf26

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

RELEASE.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ pandas 0.8.2
8787
- Allow MultiIndex setops with length-0 other type indexes (#1727)
8888
- Fix handling of DatetimeIndex in DataFrame.to_records (#1720)
8989
- Fix handling of general objects in isnull on which bool(...) fails (#1749)
90+
- Fix .ix indexing with MultiIndex ambiguity (#1678)
9091

9192
pandas 0.8.1
9293
============

pandas/core/indexing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ def __getitem__(self, key):
3535
return self._getitem_axis(key, axis=0)
3636

3737
def _get_label(self, label, axis=0):
38+
# ueber-hack
39+
if (isinstance(label, tuple) and
40+
isinstance(label[axis], slice)):
41+
42+
raise IndexingError('no slices here')
43+
3844
try:
3945
return self.obj.xs(label, axis=axis, copy=False)
4046
except Exception:

pandas/tests/test_multilevel.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,6 +1443,18 @@ def test_frame_dict_constructor_empty_series(self):
14431443
df = DataFrame({'foo':s1, 'bar':s2, 'baz':s3})
14441444
df = DataFrame.from_dict({'foo':s1, 'baz':s3, 'bar':s2})
14451445

1446+
def test_indexing_ambiguity_bug_1678(self):
1447+
columns = MultiIndex.from_tuples([('Ohio', 'Green'), ('Ohio', 'Red'),
1448+
('Colorado', 'Green')])
1449+
index = MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1), ('b', 2)])
1450+
1451+
frame = DataFrame(np.arange(12).reshape((4, 3)), index=index,
1452+
columns=columns)
1453+
1454+
result = frame.ix[:, 1]
1455+
exp = frame.icol(1)
1456+
self.assert_(isinstance(result, Series))
1457+
assert_series_equal(result, exp)
14461458

14471459
if __name__ == '__main__':
14481460

pandas/tests/test_panel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1087,7 +1087,7 @@ def test_from_frame_level1_unsorted(self):
10871087
midx = MultiIndex.from_tuples(tuples)
10881088
df = DataFrame(np.random.rand(5,4), index=midx)
10891089
p = df.to_panel()
1090-
assert_frame_equal(p.minor_xs(2), df.ix[:,2].sort_index())
1090+
assert_frame_equal(p.minor_xs(2), df.xs(2, level=1).sort_index())
10911091

10921092
def test_to_excel(self):
10931093
try:

0 commit comments

Comments
 (0)