From 24b2f38f41d58d0459efb85c8dd4173084cb1c4d Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 31 Jan 2020 11:33:45 -0800 Subject: [PATCH 1/3] REG: DataFrame.__setitem__(slice) is positional, closes #31469 --- pandas/core/frame.py | 5 ++++- pandas/tests/frame/indexing/test_indexing.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 70e440b49ae6c..0dea8235e9d3f 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2937,8 +2937,11 @@ def __setitem__(self, key, value): self._set_item(key, value) def _setitem_slice(self, key, value): + # NB: we can't just use self.loc[key] = value because that + # operates on labels and we need to operate positional for + # backwards-compat, xref GH#31469 self._check_setitem_copy() - self.loc[key] = value + self.loc._setitem_with_indexer(key, value) def _setitem_array(self, key, value): # also raises Exception if object array with NA values diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index cbb9dd09bbede..64d0f9ee2b062 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -860,6 +860,15 @@ def test_fancy_getitem_slice_mixed(self, float_frame, float_string_frame): assert (float_frame["C"] == 4).all() + def test_setitem_slice_position(self): + # GH#31469 + df = pd.DataFrame(np.zeros((100, 1))) + df[-4:] = 1 + arr = np.zeros((100, 1)) + arr[-4:] = 1 + expected = pd.DataFrame(arr) + tm.assert_frame_equal(df, expected) + def test_getitem_setitem_non_ix_labels(self): df = tm.makeTimeDataFrame() From b16d5c1d8564412f591c79f988355724b05e37ca Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 31 Jan 2020 11:34:57 -0800 Subject: [PATCH 2/3] whatsnew --- doc/source/whatsnew/v1.0.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.0.1.rst b/doc/source/whatsnew/v1.0.1.rst index ff8433c7cafd9..6529921ee3b09 100644 --- a/doc/source/whatsnew/v1.0.1.rst +++ b/doc/source/whatsnew/v1.0.1.rst @@ -67,7 +67,7 @@ Interval Indexing ^^^^^^^^ - +- Bug in :class:`DataFrame` setting values with a slice (e.g. ``df[-4:] = 1``) indexing by label instead of position (:issue:`31469`) - - From b2b9ebbb82f3933b09bd4aa338e9dbd227a6e93c Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 31 Jan 2020 13:27:14 -0800 Subject: [PATCH 3/3] Update doc/source/whatsnew/v1.0.1.rst Co-Authored-By: Joris Van den Bossche --- doc/source/whatsnew/v1.0.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.0.1.rst b/doc/source/whatsnew/v1.0.1.rst index 6529921ee3b09..206be97fe202f 100644 --- a/doc/source/whatsnew/v1.0.1.rst +++ b/doc/source/whatsnew/v1.0.1.rst @@ -67,7 +67,7 @@ Interval Indexing ^^^^^^^^ -- Bug in :class:`DataFrame` setting values with a slice (e.g. ``df[-4:] = 1``) indexing by label instead of position (:issue:`31469`) +- Fixed regression in :class:`DataFrame` setting values with a slice (e.g. ``df[-4:] = 1``) indexing by label instead of position (:issue:`31469`) - -