Skip to content

Commit 453eaba

Browse files
add inplace keyword
1 parent d20b0cb commit 453eaba

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

pandas/core/frame.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -3932,8 +3932,9 @@ def _set_value(
39323932
# error: Argument 2 to "column_setitem" of "BlockManager" has
39333933
# incompatible type "Union[Hashable, Sequence[Hashable]]";
39343934
# expected "Union[int, slice, ndarray[Any, Any]]"
3935-
self._mgr.column_setitem(icol, iindex, value) # type: ignore[arg-type]
3936-
self._clear_item_cache()
3935+
self._mgr.column_setitem( # type: ignore[arg-type]
3936+
icol, iindex, value, inplace=True
3937+
)
39373938

39383939
except (KeyError, TypeError, ValueError, LossySetitemError):
39393940
# set using a non-recursive method & reset the cache

pandas/core/internals/array_manager.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,9 @@ def iset(
869869
self.arrays[mgr_idx] = value_arr
870870
return
871871

872-
def column_setitem(self, loc: int, idx: int | slice | np.ndarray, value) -> None:
872+
def column_setitem(
873+
self, loc: int, idx: int | slice | np.ndarray, value, inplace: bool = False
874+
) -> None:
873875
"""
874876
Set values ("setitem") into a single column (not setting the full column).
875877
@@ -879,9 +881,12 @@ def column_setitem(self, loc: int, idx: int | slice | np.ndarray, value) -> None
879881
arr = self.arrays[loc]
880882
# create temporary SingleArrayManager without ref to use setitem implementation
881883
mgr = SingleArrayManager([arr], [self._axes[0]])
882-
new_mgr = mgr.setitem((idx,), value)
883-
# update existing ArrayManager in-place
884-
self.arrays[loc] = new_mgr.arrays[0]
884+
if inplace:
885+
mgr.setitem_inplace(idx, value)
886+
else:
887+
new_mgr = mgr.setitem((idx,), value)
888+
# update existing ArrayManager in-place
889+
self.arrays[loc] = new_mgr.arrays[0]
885890

886891
def insert(self, loc: int, item: Hashable, value: ArrayLike) -> None:
887892
"""

pandas/core/internals/managers.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -1188,16 +1188,21 @@ def _iset_single(
11881188
self.blocks = new_blocks
11891189
return
11901190

1191-
def column_setitem(self, loc: int, idx: int | slice | np.ndarray, value) -> None:
1191+
def column_setitem(
1192+
self, loc: int, idx: int | slice | np.ndarray, value, inplace: bool = False
1193+
) -> None:
11921194
"""
11931195
Set values ("setitem") into a single column (not setting the full column).
11941196
11951197
This is a method on the BlockManager level, to avoid creating an
11961198
intermediate Series at the DataFrame level (`s = df[loc]; s[idx] = value`)
11971199
"""
11981200
col_mgr = self.iget(loc)
1199-
new_mgr = col_mgr.setitem((idx,), value)
1200-
self.iset(loc, new_mgr._block.values, inplace=True)
1201+
if inplace:
1202+
col_mgr.setitem_inplace(idx, value)
1203+
else:
1204+
new_mgr = col_mgr.setitem((idx,), value)
1205+
self.iset(loc, new_mgr._block.values, inplace=True)
12011206

12021207
def insert(self, loc: int, item: Hashable, value: ArrayLike) -> None:
12031208
"""

0 commit comments

Comments
 (0)