Skip to content

Commit c239b06

Browse files
committed
Merge pull request #5600 from jreback/replace_api
BUG: replace with a scalar works like a list of to_replace for compat with 0.12 (GH5319)
2 parents f11dc08 + 0477cd1 commit c239b06

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

pandas/core/generic.py

+9
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ def is_dictlike(x):
4141

4242

4343
def _single_replace(self, to_replace, method, inplace, limit):
44+
if self.ndim != 1:
45+
raise TypeError('cannot replace {0} with method {1} on a {2}'.format(to_replace,
46+
method,type(self).__name__))
47+
4448
orig_dtype = self.dtype
4549
result = self if inplace else self.copy()
4650
fill_f = com._get_fill_func(method)
@@ -2039,6 +2043,11 @@ def replace(self, to_replace=None, value=None, inplace=False, limit=None,
20392043
self._consolidate_inplace()
20402044

20412045
if value is None:
2046+
# passing a single value that is scalar like
2047+
# when value is None (GH5319), for compat
2048+
if not is_dictlike(to_replace) and not is_dictlike(regex):
2049+
to_replace = [ to_replace ]
2050+
20422051
if isinstance(to_replace, (tuple, list)):
20432052
return _single_replace(self, to_replace, method, inplace,
20442053
limit)

pandas/tests/test_frame.py

+1
Original file line numberDiff line numberDiff line change
@@ -6974,6 +6974,7 @@ def test_replace_inplace(self):
69746974
assert_frame_equal(tsframe, self.tsframe.fillna(0))
69756975

69766976
self.assertRaises(TypeError, self.tsframe.replace, nan, inplace=True)
6977+
self.assertRaises(TypeError, self.tsframe.replace, nan)
69776978

69786979
# mixed type
69796980
self.mixed_frame['foo'][5:20] = nan

pandas/tests/test_series.py

+12
Original file line numberDiff line numberDiff line change
@@ -5139,6 +5139,18 @@ def test_replace(self):
51395139
result = ser.replace([0, 1, 2, 3, 4], [4, 3, 2, 1, 0])
51405140
assert_series_equal(result, Series([4, 3, 2, 1, 0]))
51415141

5142+
# API change from 0.12?
5143+
# GH 5319
5144+
ser = Series([0, np.nan, 2, 3, 4])
5145+
expected = ser.ffill()
5146+
result = ser.replace([np.nan])
5147+
assert_series_equal(result, expected)
5148+
5149+
ser = Series([0, np.nan, 2, 3, 4])
5150+
expected = ser.ffill()
5151+
result = ser.replace(np.nan)
5152+
assert_series_equal(result, expected)
5153+
51425154
def test_replace_with_single_list(self):
51435155
ser = Series([0, 1, 2, 3, 4])
51445156
result = ser.replace([1,2,3])

0 commit comments

Comments
 (0)