From 560dc79f99e5c93f7a86d4525cb72d400e4c2996 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Thu, 7 Jul 2022 08:33:10 +0200 Subject: [PATCH 1/4] WARN: Don't show FutureWarning when enlarging df with iloc --- pandas/core/indexing.py | 7 ++++++- pandas/tests/frame/indexing/test_indexing.py | 9 +++++++++ pandas/tests/frame/indexing/test_setitem.py | 4 +--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 665333d0d7b4f..adc4b8c003515 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2004,11 +2004,16 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): if ( isinstance(new_values, np.ndarray) and isinstance(orig_values, np.ndarray) - and np.shares_memory(new_values, orig_values) + and ( + np.shares_memory(new_values, orig_values) + or new_values.shape != orig_values.shape + ) ): # TODO: get something like tm.shares_memory working? # The values were set inplace after all, no need to warn, # e.g. test_rename_nocopy + # In case of enlarging we can not set inplace, so need to + # warn either pass else: warnings.warn( diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index 994181eac8199..448da24fc70b9 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1307,6 +1307,15 @@ def test_loc_setitem_rhs_frame(self, idxr, val): expected = DataFrame({"a": [np.nan, val]}) tm.assert_frame_equal(df, expected) + def test_iloc_setitem_enlarge_no_warning(self): + # GH#47381 + df = DataFrame(columns=["a", "b"]) + expected = df.copy() + view = df[:] + with tm.assert_produces_warning(None): + df.iloc[:, 0] = np.array([1], dtype=np.float64) + tm.assert_frame_equal(view, expected) + class TestDataFrameIndexingUInt64: def test_setitem(self, uint64_frame): diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index 9e9310d735f6a..45f36834510ed 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -806,9 +806,7 @@ def test_setitem_string_column_numpy_dtype_raising(self): def test_setitem_empty_df_duplicate_columns(self): # GH#38521 df = DataFrame(columns=["a", "b", "b"], dtype="float64") - msg = "will attempt to set the values inplace instead" - with tm.assert_produces_warning(FutureWarning, match=msg): - df.loc[:, "a"] = list(range(2)) + df.loc[:, "a"] = list(range(2)) expected = DataFrame( [[0, np.nan, np.nan], [1, np.nan, np.nan]], columns=["a", "b", "b"] ) From a96caa7d0d5475adf6df91e8e52fc9800cb8bc22 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Thu, 7 Jul 2022 09:37:32 +0200 Subject: [PATCH 2/4] Change test --- 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 448da24fc70b9..f5a38c43e6609 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1313,7 +1313,7 @@ def test_iloc_setitem_enlarge_no_warning(self): expected = df.copy() view = df[:] with tm.assert_produces_warning(None): - df.iloc[:, 0] = np.array([1], dtype=np.float64) + df.iloc[:, 0] = np.array([1, 2], dtype=np.float64) tm.assert_frame_equal(view, expected) From f0656dae097a1185ab8f1a3d01e07b9deec2fc21 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Thu, 7 Jul 2022 09:46:28 +0200 Subject: [PATCH 3/4] Xfail for array manager --- pandas/tests/frame/indexing/test_indexing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index f5a38c43e6609..e8d7673a67889 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1307,6 +1307,7 @@ def test_loc_setitem_rhs_frame(self, idxr, val): expected = DataFrame({"a": [np.nan, val]}) tm.assert_frame_equal(df, expected) + @td.skip_array_manager_not_yet_implemented def test_iloc_setitem_enlarge_no_warning(self): # GH#47381 df = DataFrame(columns=["a", "b"]) From fc1a840b2c0c42e82f3ccdaa075e84e5b6f62ab8 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Thu, 7 Jul 2022 13:10:15 +0200 Subject: [PATCH 4/4] Change decorator --- 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 e8d7673a67889..edcd577dd948d 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1307,7 +1307,7 @@ def test_loc_setitem_rhs_frame(self, idxr, val): expected = DataFrame({"a": [np.nan, val]}) tm.assert_frame_equal(df, expected) - @td.skip_array_manager_not_yet_implemented + @td.skip_array_manager_invalid_test def test_iloc_setitem_enlarge_no_warning(self): # GH#47381 df = DataFrame(columns=["a", "b"])