diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 8cccb7001eb7b..8e2524c21d31e 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -7487,9 +7487,13 @@ def replace( if inplace: return None return self.copy(deep=False) - if is_dict_like(to_replace): if is_dict_like(value): # {'A' : NA} -> {'A' : 0} + if isinstance(self, ABCSeries): + raise ValueError( + "to_replace and value cannot be dict-like for " + "Series.replace" + ) # Note: Checking below for `in foo.keys()` instead of # `in foo` is needed for when we have a Series and not dict mapping = { diff --git a/pandas/tests/series/methods/test_replace.py b/pandas/tests/series/methods/test_replace.py index de0855bf7192e..611fcc114db6c 100644 --- a/pandas/tests/series/methods/test_replace.py +++ b/pandas/tests/series/methods/test_replace.py @@ -496,6 +496,15 @@ def test_replace_only_one_dictlike_arg(self, fixed_now_ts): with pytest.raises(ValueError, match=msg): ser.replace(to_replace, value) + def test_replace_dict_like_with_dict_like(self): + # GH 59452 + s = pd.Series([1, 2, 3, 4, 5]) + to_replace = pd.Series([1]) + value = pd.Series([75]) + msg = "to_replace and value cannot be dict-like for Series.replace" + with pytest.raises(ValueError, match=msg): + s.replace(to_replace, value) + def test_replace_extension_other(self, frame_or_series): # https://github.com/pandas-dev/pandas/issues/34530 obj = frame_or_series(pd.array([1, 2, 3], dtype="Int64"))