Skip to content

Commit 0477cd1

Browse files
committed
BUG: replace with a scalar works like a list of to_replace for compat with 0.12 (GH5319)
1 parent d3be761 commit 0477cd1

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)
@@ -2033,6 +2037,11 @@ def replace(self, to_replace=None, value=None, inplace=False, limit=None,
20332037
self._consolidate_inplace()
20342038

20352039
if value is None:
2040+
# passing a single value that is scalar like
2041+
# when value is None (GH5319), for compat
2042+
if not is_dictlike(to_replace) and not is_dictlike(regex):
2043+
to_replace = [ to_replace ]
2044+
20362045
if isinstance(to_replace, (tuple, list)):
20372046
return _single_replace(self, to_replace, method, inplace,
20382047
limit)

pandas/tests/test_frame.py

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

69776977
self.assertRaises(TypeError, self.tsframe.replace, nan, inplace=True)
6978+
self.assertRaises(TypeError, self.tsframe.replace, nan)
69786979

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

pandas/tests/test_series.py

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

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

0 commit comments

Comments
 (0)