From 7f76f294c57fa8bae5cbf39cd825ea41bfaad86f Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Sat, 10 Feb 2024 23:46:51 +0100 Subject: [PATCH] Remove support for slices in take --- doc/source/whatsnew/v3.0.0.rst | 1 + pandas/core/generic.py | 22 ++++------------------ pandas/tests/frame/indexing/test_take.py | 6 +++--- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/doc/source/whatsnew/v3.0.0.rst b/doc/source/whatsnew/v3.0.0.rst index 8b8f5bf3d028c..bca23fcb4bb67 100644 --- a/doc/source/whatsnew/v3.0.0.rst +++ b/doc/source/whatsnew/v3.0.0.rst @@ -122,6 +122,7 @@ Removal of prior version deprecations/changes - Removed ``read_gbq`` and ``DataFrame.to_gbq``. Use ``pandas_gbq.read_gbq`` and ``pandas_gbq.to_gbq`` instead https://pandas-gbq.readthedocs.io/en/latest/api.html (:issue:`55525`) - Removed deprecated argument ``obj`` in :meth:`.DataFrameGroupBy.get_group` and :meth:`.SeriesGroupBy.get_group` (:issue:`53545`) - Removed deprecated behavior of :meth:`Series.agg` using :meth:`Series.apply` (:issue:`53325`) +- Removed support for ``slice`` in :meth:`DataFrame.take` (:issue:`51539`) - Removed the ``ArrayManager`` (:issue:`55043`) - Removed the ``fastpath`` argument from the :class:`Series` constructor (:issue:`55466`) - Removed the ``is_boolean``, ``is_integer``, ``is_floating``, ``holds_integer``, ``is_numeric``, ``is_categorical``, ``is_object``, and ``is_interval`` attributes of :class:`Index` (:issue:`50042`) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 8e0767d9b3699..a987e607f0072 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -3912,28 +3912,14 @@ class max_speed nv.validate_take((), kwargs) - if not isinstance(indices, slice): - indices = np.asarray(indices, dtype=np.intp) - if axis == 0 and indices.ndim == 1 and is_range_indexer(indices, len(self)): - return self.copy(deep=False) - elif self.ndim == 1: + if isinstance(indices, slice): raise TypeError( f"{type(self).__name__}.take requires a sequence of integers, " "not slice." ) - else: - warnings.warn( - # GH#51539 - f"Passing a slice to {type(self).__name__}.take is deprecated " - "and will raise in a future version. Use `obj[slicer]` or pass " - "a sequence of integers instead.", - FutureWarning, - stacklevel=find_stack_level(), - ) - # We can get here with a slice via DataFrame.__getitem__ - indices = np.arange( - indices.start, indices.stop, indices.step, dtype=np.intp - ) + indices = np.asarray(indices, dtype=np.intp) + if axis == 0 and indices.ndim == 1 and is_range_indexer(indices, len(self)): + return self.copy(deep=False) new_data = self._mgr.take( indices, diff --git a/pandas/tests/frame/indexing/test_take.py b/pandas/tests/frame/indexing/test_take.py index 8c17231440917..56a7bfd003083 100644 --- a/pandas/tests/frame/indexing/test_take.py +++ b/pandas/tests/frame/indexing/test_take.py @@ -4,14 +4,14 @@ class TestDataFrameTake: - def test_take_slices_deprecated(self, float_frame): + def test_take_slices_not_supported(self, float_frame): # GH#51539 df = float_frame slc = slice(0, 4, 1) - with tm.assert_produces_warning(FutureWarning): + with pytest.raises(TypeError, match="slice"): df.take(slc, axis=0) - with tm.assert_produces_warning(FutureWarning): + with pytest.raises(TypeError, match="slice"): df.take(slc, axis=1) def test_take(self, float_frame):