Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pandas/core/internals/blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -661,8 +661,13 @@ def replace(
return [blk]

regex = should_use_regex(regex, to_replace)
mask = missing.mask_missing(values, to_replace)

if regex:
if self._can_hold_element(value):
blk = self if inplace else self.copy()
putmask_inplace(blk.values, mask, value)
return blk.convert(numeric=False, copy=False)
return self._replace_regex(to_replace, value, inplace=inplace)

if not self._can_hold_element(to_replace):
Expand All @@ -672,7 +677,6 @@ def replace(
# replace_list instead of replace.
return [self] if inplace else [self.copy()]

mask = missing.mask_missing(values, to_replace)
if not mask.any():
# Note: we get here with test_replace_extension_other incorrectly
# bc _can_hold_element is incorrect.
Expand Down
7 changes: 7 additions & 0 deletions pandas/tests/series/methods/test_replace.py
Original file line number Diff line number Diff line change
Expand Up @@ -512,3 +512,10 @@ def test_pandas_replace_na(self):
result = ser.replace(regex_mapping, regex=True)
exp = pd.Series(["CC", "CC", "CC-REPL", "DD", "CC", "", pd.NA], dtype="string")
tm.assert_series_equal(result, exp)

def test_replace_regex_dtype(self):
# GH-48644
s = pd.Series(["0"])
exp = s.replace(to_replace="0", value=1, regex=False).dtype
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

explictly create the expected and use tm.assert_series_equal

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, you should create expected = Series(...) not using replace. And please don't use one letter variable names

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

res = s.replace(to_replace="0", value=1, regex=True).dtype
assert exp == res