From 29b6b6472773617af02cf90234440fd94157d15b 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 | 11 +++++------ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 9d9d8334fcaf40..c7a27ebc65c05a 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2172,6 +2172,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``. @@ -2234,14 +2235,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=None, is_copy=True, **kwargs): + if convert is not None: 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 5c76cca08f6094..17d0737ba7c634 100644 --- a/pandas/core/sparse/series.py +++ b/pandas/core/sparse/series.py @@ -387,7 +387,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) @@ -629,14 +629,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=None, *args, **kwargs): + if convert is not None: 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 38ed8ee20bc501..cb9d22f42d4523 100644 --- a/pandas/tests/frame/test_axis_select_reindex.py +++ b/pandas/tests/frame/test_axis_select_reindex.py @@ -944,6 +944,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..819068fbfabad2 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) @@ -535,11 +538,7 @@ def test_numpy_take(self): sp = SparseSeries([1.0, 2.0, 3.0]) indices = [1, 2] - # gh-17352: older versions of numpy don't properly - # pass in arguments to downstream .take() implementations. - warning = FutureWarning if _np_version_under1p12 else None - - with tm.assert_produces_warning(warning, check_stacklevel=False): + if not _np_version_under1p12: tm.assert_series_equal(np.take(sp, indices, axis=0).to_dense(), np.take(sp.to_dense(), indices, axis=0)) @@ -549,7 +548,7 @@ def test_numpy_take(self): msg = "the 'mode' parameter is not supported" tm.assert_raises_regex(ValueError, msg, np.take, - sp, indices, mode='clip') + sp, indices, out=None, mode='clip') def test_setitem(self): self.bseries[5] = 7.