Skip to content

Commit 028d0d6

Browse files
authored
WARN: Don't show FutureWarning when enlarging df with iloc (#47621)
* WARN: Don't show FutureWarning when enlarging df with iloc * Change test * Xfail for array manager * Change decorator
1 parent efebf78 commit 028d0d6

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

pandas/core/indexing.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -2004,11 +2004,16 @@ def _setitem_single_column(self, loc: int, value, plane_indexer):
20042004
if (
20052005
isinstance(new_values, np.ndarray)
20062006
and isinstance(orig_values, np.ndarray)
2007-
and np.shares_memory(new_values, orig_values)
2007+
and (
2008+
np.shares_memory(new_values, orig_values)
2009+
or new_values.shape != orig_values.shape
2010+
)
20082011
):
20092012
# TODO: get something like tm.shares_memory working?
20102013
# The values were set inplace after all, no need to warn,
20112014
# e.g. test_rename_nocopy
2015+
# In case of enlarging we can not set inplace, so need to
2016+
# warn either
20122017
pass
20132018
else:
20142019
warnings.warn(

pandas/tests/frame/indexing/test_indexing.py

+10
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,16 @@ def test_loc_setitem_rhs_frame(self, idxr, val):
13071307
expected = DataFrame({"a": [np.nan, val]})
13081308
tm.assert_frame_equal(df, expected)
13091309

1310+
@td.skip_array_manager_invalid_test
1311+
def test_iloc_setitem_enlarge_no_warning(self):
1312+
# GH#47381
1313+
df = DataFrame(columns=["a", "b"])
1314+
expected = df.copy()
1315+
view = df[:]
1316+
with tm.assert_produces_warning(None):
1317+
df.iloc[:, 0] = np.array([1, 2], dtype=np.float64)
1318+
tm.assert_frame_equal(view, expected)
1319+
13101320

13111321
class TestDataFrameIndexingUInt64:
13121322
def test_setitem(self, uint64_frame):

pandas/tests/frame/indexing/test_setitem.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -806,9 +806,7 @@ def test_setitem_string_column_numpy_dtype_raising(self):
806806
def test_setitem_empty_df_duplicate_columns(self):
807807
# GH#38521
808808
df = DataFrame(columns=["a", "b", "b"], dtype="float64")
809-
msg = "will attempt to set the values inplace instead"
810-
with tm.assert_produces_warning(FutureWarning, match=msg):
811-
df.loc[:, "a"] = list(range(2))
809+
df.loc[:, "a"] = list(range(2))
812810
expected = DataFrame(
813811
[[0, np.nan, np.nan], [1, np.nan, np.nan]], columns=["a", "b", "b"]
814812
)

0 commit comments

Comments
 (0)