Skip to content

Commit d93006b

Browse files
phoflim-vinicius
authored and
im-vinicius
committed
CoW: Delay copy when inserting Series into DataFrame (pandas-dev#52061)
1 parent 3a3432a commit d93006b

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

pandas/core/frame.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4803,8 +4803,8 @@ def insert(
48034803
elif isinstance(value, DataFrame):
48044804
value = value.iloc[:, 0]
48054805

4806-
value, _ = self._sanitize_column(value)
4807-
self._mgr.insert(loc, column, value)
4806+
value, refs = self._sanitize_column(value, using_cow=using_copy_on_write())
4807+
self._mgr.insert(loc, column, value, refs=refs)
48084808

48094809
def assign(self, **kwargs) -> DataFrame:
48104810
r"""

pandas/tests/copy_view/test_methods.py

+15
Original file line numberDiff line numberDiff line change
@@ -1739,3 +1739,18 @@ def test_series_view(using_copy_on_write):
17391739
else:
17401740
expected = Series([100, 2, 3])
17411741
tm.assert_series_equal(ser, expected)
1742+
1743+
1744+
def test_insert_series(using_copy_on_write):
1745+
df = DataFrame({"a": [1, 2, 3]})
1746+
ser = Series([1, 2, 3])
1747+
ser_orig = ser.copy()
1748+
df.insert(loc=1, value=ser, column="b")
1749+
if using_copy_on_write:
1750+
assert np.shares_memory(get_array(ser), get_array(df, "b"))
1751+
assert not df._mgr._has_no_reference(1)
1752+
else:
1753+
assert not np.shares_memory(get_array(ser), get_array(df, "b"))
1754+
1755+
df.iloc[0, 1] = 100
1756+
tm.assert_series_equal(ser, ser_orig)

0 commit comments

Comments
 (0)