diff --git a/doc/source/release.rst b/doc/source/release.rst index b74b23029a2ac..d4764dbe81a9a 100644 --- a/doc/source/release.rst +++ b/doc/source/release.rst @@ -642,6 +642,7 @@ Bug Fixes related (:issue:`5312`) - Fix return value/type signature of ``initObjToJSON()`` to be compatible with numpy's ``import_array()`` (:issue:`5334`, :issue:`5326`) + - Bug when renaming then set_index on a DataFrame (:issue:`5344`) pandas 0.12.0 ------------- diff --git a/pandas/core/internals.py b/pandas/core/internals.py index c327458e00a07..62aa95d270924 100644 --- a/pandas/core/internals.py +++ b/pandas/core/internals.py @@ -1992,6 +1992,9 @@ def _set_ref_locs(self, labels=None, do_refs=False): self._ref_locs = rl return rl + elif do_refs: + self._reset_ref_locs() + # return our cached _ref_locs (or will compute again # when we recreate the block manager if needed return getattr(self, '_ref_locs', None) diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index 6aa4322234d7f..704493308f960 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -8551,6 +8551,19 @@ def test_rename_inplace(self): self.assert_('foo' in frame) self.assert_(id(frame['foo']) != c_id) + def test_rename_bug(self): + # GH 5344 + # rename set ref_locs, and set_index was not resetting + df = DataFrame({ 0 : ['foo','bar'], 1 : ['bah','bas'], 2 : [1,2]}) + df = df.rename(columns={0 : 'a'}) + df = df.rename(columns={1 : 'b'}) + df = df.set_index(['a','b']) + df.columns = ['2001-01-01'] + expected = DataFrame([[1],[2]],index=MultiIndex.from_tuples([('foo','bah'),('bar','bas')], + names=['a','b']), + columns=['2001-01-01']) + assert_frame_equal(df,expected) + #---------------------------------------------------------------------- # Time series related def test_diff(self):