Skip to content

Commit 716ebdc

Browse files
committed
BUG: fix scalar setting via ix with MultiIndex, GH #551
1 parent 5c447dd commit 716ebdc

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

RELEASE.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ pandas 0.6.2
110110
- Handle all NA case in Series.corr, was raising exception (GH #548)
111111
- Aggregating by multiple levels with ``level`` argument to DataFrame, Series
112112
stat method, was broken (GH #545)
113+
- Fix Cython buf when converter passed to read_csv produced a numeric array
114+
(buffer dtype mismatch when passed to Cython type inference function) (GH
115+
#546)
116+
- Fix exception when setting scalar value using .ix on a DataFrame with a
117+
MultiIndex (GH #551)
113118

114119
Thanks
115120
------

pandas/core/indexing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ def _convert_to_indexer(self, obj, axis=0):
211211
- No, prefer label-based indexing
212212
"""
213213
index = self.obj._get_axis(axis)
214+
215+
try:
216+
return index.get_loc(obj)
217+
except (KeyError, TypeError):
218+
pass
219+
214220
is_int_index = _is_integer_index(index)
215221
if isinstance(obj, slice):
216222
if _is_label_slice(index, obj):

pandas/tests/test_multilevel.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,16 @@ def test_setitem_change_dtype(self):
290290
reindexed = dft.reindex(columns=[('foo', 'two')])
291291
assert_series_equal(reindexed['foo', 'two'], s > s.median())
292292

293+
def test_frame_setitem_ix(self):
294+
self.frame.ix[('bar', 'two'), 'B'] = 5
295+
self.assertEquals(self.frame.ix[('bar', 'two'), 'B'], 5)
296+
297+
# with integer labels
298+
df = self.frame.copy()
299+
df.columns = range(3)
300+
df.ix[('bar', 'two'), 1] = 7
301+
self.assertEquals(df.ix[('bar', 'two'), 1], 7)
302+
293303
def test_fancy_slice_partial(self):
294304
result = self.frame.ix['bar':'baz']
295305
expected = self.frame[3:7]

0 commit comments

Comments
 (0)