From c5d0f08594fa076683822e7746bb9787b10c1c77 Mon Sep 17 00:00:00 2001 From: gfyoung Date: Mon, 9 Oct 2017 22:05:48 -0700 Subject: [PATCH] DEPR: Deprecate the convert parameter completely Previously, we weren't issuing a warning if the user happened to pass in the original default of "True", which would cause downstream code to break. Closes gh-17828. --- pandas/core/generic.py | 10 ++++++---- pandas/core/sparse/series.py | 11 ++++++----- pandas/tests/frame/test_axis_select_reindex.py | 4 ++++ pandas/tests/sparse/test_series.py | 3 +++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index c7ae9bbee90130..885a3efd2a998c 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2137,6 +2137,7 @@ def _take(self, indices, axis=0, convert=True, is_copy=True): selecting rows, "1" means that we are selecting columns, etc. convert : bool, default True .. deprecated:: 0.21.0 + In the future, negative indices will always be converted. Whether to convert negative indices into positive ones. For example, ``-1`` would map to the ``len(axis) - 1``. @@ -2199,14 +2200,15 @@ class max_speed """ @Appender(_shared_docs['take']) - def take(self, indices, axis=0, convert=True, is_copy=True, **kwargs): - nv.validate_take(tuple(), kwargs) - - if not convert: + def take(self, indices, axis=0, convert=-1, is_copy=True, **kwargs): + if convert != -1: msg = ("The 'convert' parameter is deprecated " "and will be removed in a future version.") warnings.warn(msg, FutureWarning, stacklevel=2) + else: + convert = True + convert = nv.validate_take(tuple(), kwargs) return self._take(indices, axis=axis, convert=convert, is_copy=is_copy) def xs(self, key, axis=0, level=None, drop_level=True): diff --git a/pandas/core/sparse/series.py b/pandas/core/sparse/series.py index 3255bd6bd17e8c..fac4f56ff9709a 100644 --- a/pandas/core/sparse/series.py +++ b/pandas/core/sparse/series.py @@ -386,7 +386,7 @@ def _ixs(self, i, axis=0): """ label = self.index[i] if isinstance(label, Index): - return self.take(i, axis=axis, convert=True) + return self.take(i, axis=axis) else: return self._get_val_at(i) @@ -628,14 +628,15 @@ def sparse_reindex(self, new_index): fill_value=self.fill_value).__finalize__(self) @Appender(generic._shared_docs['take']) - def take(self, indices, axis=0, convert=True, *args, **kwargs): - convert = nv.validate_take_with_convert(convert, args, kwargs) - - if not convert: + def take(self, indices, axis=0, convert=-1, *args, **kwargs): + if convert != -1: msg = ("The 'convert' parameter is deprecated " "and will be removed in a future version.") warnings.warn(msg, FutureWarning, stacklevel=2) + else: + convert = True + nv.validate_take_with_convert(convert, args, kwargs) new_values = SparseArray.take(self.values, indices) new_index = self.index.take(indices) return self._constructor(new_values, diff --git a/pandas/tests/frame/test_axis_select_reindex.py b/pandas/tests/frame/test_axis_select_reindex.py index f9a4275d14f55d..24d1f5b9d2a48e 100644 --- a/pandas/tests/frame/test_axis_select_reindex.py +++ b/pandas/tests/frame/test_axis_select_reindex.py @@ -852,6 +852,10 @@ def test_take(self): expected = df.reindex(df.index.take(order)) assert_frame_equal(result, expected) + with tm.assert_produces_warning(FutureWarning): + result = df.take(order, convert=True, axis=0) + assert_frame_equal(result, expected) + with tm.assert_produces_warning(FutureWarning): result = df.take(order, convert=False, axis=0) assert_frame_equal(result, expected) diff --git a/pandas/tests/sparse/test_series.py b/pandas/tests/sparse/test_series.py index 7c7399317809f4..dcd33da76f51ff 100644 --- a/pandas/tests/sparse/test_series.py +++ b/pandas/tests/sparse/test_series.py @@ -528,6 +528,9 @@ def _compare(idx): exp = pd.Series(np.repeat(nan, 5)) tm.assert_series_equal(sp.take([0, 1, 2, 3, 4]), exp) + with tm.assert_produces_warning(FutureWarning): + sp.take([1, 5], convert=True) + with tm.assert_produces_warning(FutureWarning): sp.take([1, 5], convert=False)