From 39ea54ecdf1ca4cb3f3a349172352a410d799474 Mon Sep 17 00:00:00 2001 From: TomAugspurger Date: Sat, 21 Mar 2015 08:29:28 -0500 Subject: [PATCH] BUG: fix for interp with axis=1 and inplace --- doc/source/whatsnew/v0.16.1.txt | 3 +++ pandas/core/generic.py | 5 +++-- pandas/tests/test_frame.py | 3 --- pandas/tests/test_generic.py | 14 ++++++++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/doc/source/whatsnew/v0.16.1.txt b/doc/source/whatsnew/v0.16.1.txt index bf01d3b21f3fa..b6a6d27c929f2 100644 --- a/doc/source/whatsnew/v0.16.1.txt +++ b/doc/source/whatsnew/v0.16.1.txt @@ -31,3 +31,6 @@ Performance Improvements Bug Fixes ~~~~~~~~~ + + +- Fixed bug with inplace interpolace along the "columns" axis (:issue:`9687`) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index e05709d7a180f..21de2fe86689d 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2736,10 +2736,11 @@ def interpolate(self, method='linear', axis=0, limit=None, inplace=False, if self.ndim > 2: raise NotImplementedError("Interpolate has not been implemented " "on Panel and Panel 4D objects.") - + axis = self._get_axis_number(axis) if axis == 0: ax = self._info_axis_name elif axis == 1: + orig = self self = self.T ax = 1 ax = self._get_axis_number(ax) @@ -2777,7 +2778,7 @@ def interpolate(self, method='linear', axis=0, limit=None, inplace=False, if inplace: if axis == 1: self._update_inplace(new_data) - self = self.T + orig._data = self.T._data else: self._update_inplace(new_data) else: diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index 1acad4cf978a8..ea7468673356d 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -8683,9 +8683,6 @@ def test_replace_simple_nested_dict_with_nonexistent_value(self): result = df.replace({'col': {-1: '-', 1: 'a', 4: 'b'}}) tm.assert_frame_equal(expected, result) - def test_interpolate(self): - pass - def test_replace_value_is_none(self): self.assertRaises(TypeError, self.tsframe.replace, nan) orig_value = self.tsframe.iloc[0, 0] diff --git a/pandas/tests/test_generic.py b/pandas/tests/test_generic.py index 3dd8c2594cd46..c956376c94d45 100644 --- a/pandas/tests/test_generic.py +++ b/pandas/tests/test_generic.py @@ -963,6 +963,20 @@ def test_interp_ignore_all_good(self): result = df[['B', 'D']].interpolate(downcast=None) assert_frame_equal(result, df[['B', 'D']]) + def test_interp_inplace_axis1(self): + # GH 9687 + df = DataFrame({'A': [1, 2, 3], 'B': [2, np.nan, 6], + 'C': [3, 4, 5]}) + df.interpolate(axis=1, inplace=True) + # dtypes... a bit strange here. + # df.T w/ [int, float, int] -> [float, float, float] dtypes + # this test may break if we change that in the future. + expected = DataFrame({'A': [1., 2, 3], 'B': [2., 3, 6], + 'C': [3., 4, 5]}) + assert_frame_equal(df, expected) + self.assertIs(df, df) + + def test_describe(self): desc = tm.makeDataFrame().describe() desc = tm.makeMixedDataFrame().describe()