From 1e3d047aaf17463640474ac579597602a49491b0 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Tue, 9 Aug 2022 19:46:39 +0200 Subject: [PATCH 1/3] BUG: iloc raising for ea and null slice and length one list --- pandas/core/internals/blocks.py | 3 +++ pandas/tests/frame/indexing/test_indexing.py | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index 20997bdde5da1..46c375b92dd83 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -1725,6 +1725,9 @@ def _unwrap_setitem_indexer(self, indexer): elif com.is_null_slice(indexer[1]): indexer = indexer[0] + elif is_list_like(indexer[1]) and indexer[1][0] == 0: + indexer = indexer[0] + else: raise NotImplementedError( "This should not be reached. Please report a bug at " diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index 642bdb127f209..1614f747dc27c 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1363,6 +1363,13 @@ def test_iloc_setitem_string_na(self, val): expected = DataFrame({"a": [pd.NA, "b", "c"]}, dtype="string") tm.assert_frame_equal(df, expected) + def test_iloc_setitem_ea_null_slice_length_one_list(self): + # GH# + df = DataFrame({"a": [1, 2, 3]}, dtype="Int64") + df.iloc[:, [0]] = 5 + expected = DataFrame({"a": [5, 5, 5]}, dtype="Int64") + tm.assert_frame_equal(df, expected) + class TestDataFrameIndexingUInt64: def test_setitem(self, uint64_frame): From e7c01b047912dbdcbae44eabae3ea7a0564c4d0e Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Tue, 9 Aug 2022 19:46:58 +0200 Subject: [PATCH 2/3] BUG: iloc raising for ea and null slice and length one list --- pandas/tests/frame/indexing/test_indexing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index 1614f747dc27c..bb725cb95fba2 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1364,7 +1364,7 @@ def test_iloc_setitem_string_na(self, val): tm.assert_frame_equal(df, expected) def test_iloc_setitem_ea_null_slice_length_one_list(self): - # GH# + # GH#48016 df = DataFrame({"a": [1, 2, 3]}, dtype="Int64") df.iloc[:, [0]] = 5 expected = DataFrame({"a": [5, 5, 5]}, dtype="Int64") From 77b524802f324aec717de213e052dde72206d907 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Tue, 9 Aug 2022 19:49:34 +0200 Subject: [PATCH 3/3] Parametrize tests --- pandas/tests/frame/indexing/test_indexing.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index bb725cb95fba2..9027ce8109810 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1363,10 +1363,11 @@ def test_iloc_setitem_string_na(self, val): expected = DataFrame({"a": [pd.NA, "b", "c"]}, dtype="string") tm.assert_frame_equal(df, expected) - def test_iloc_setitem_ea_null_slice_length_one_list(self): + @pytest.mark.parametrize("func", [list, Series, np.array]) + def test_iloc_setitem_ea_null_slice_length_one_list(self, func): # GH#48016 df = DataFrame({"a": [1, 2, 3]}, dtype="Int64") - df.iloc[:, [0]] = 5 + df.iloc[:, func([0])] = 5 expected = DataFrame({"a": [5, 5, 5]}, dtype="Int64") tm.assert_frame_equal(df, expected)