From 87af077b5f6bbf46500c6be4aa1802ff92fcb247 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Sun, 19 Jun 2022 21:51:12 +0200 Subject: [PATCH 1/2] BUG: DataFrame.setitem raising when rhs is ea dtype Series --- pandas/core/indexing.py | 6 +++++- pandas/tests/frame/indexing/test_setitem.py | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 5a97e1d5a04ea..09fa08339bd43 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1977,7 +1977,11 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): # We will not operate in-place, but will attempt to in the future. # To determine whether we need to issue a FutureWarning, see if the # setting in-place would work, i.e. behavior will change. - warn = can_hold_element(orig_values, value) + if isinstance(value, ABCSeries): + warn = can_hold_element(orig_values, value._values) + else: + warn = can_hold_element(orig_values, value) + # Don't issue the warning yet, as we can still trim a few cases where # behavior will not change. diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index cf6d351aa78a0..4b1056dc29c76 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -683,6 +683,13 @@ def test_boolean_mask_nullable_int64(self): ) tm.assert_frame_equal(result, expected) + def test_setitem_ea_dtype_rhs_series(self): + # GH# + df = DataFrame({"a": [1, 2]}) + df["a"] = Series([1, 2], dtype="Int64") + expected = DataFrame({"a": [1, 2]}, dtype="Int64") + tm.assert_frame_equal(df, expected) + # TODO(ArrayManager) set column with 2d column array, see #44788 @td.skip_array_manager_not_yet_implemented def test_setitem_npmatrix_2d(self): From 9268fb2d49fc6a1a009332ab3ab623522d6ec67a Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Sun, 19 Jun 2022 21:53:20 +0200 Subject: [PATCH 2/2] Add gh ref --- pandas/tests/frame/indexing/test_setitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index 4b1056dc29c76..a59d7d4f3bd45 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -684,7 +684,7 @@ def test_boolean_mask_nullable_int64(self): tm.assert_frame_equal(result, expected) def test_setitem_ea_dtype_rhs_series(self): - # GH# + # GH#47425 df = DataFrame({"a": [1, 2]}) df["a"] = Series([1, 2], dtype="Int64") expected = DataFrame({"a": [1, 2]}, dtype="Int64")