Skip to content

Commit b874d83

Browse files
author
Chang She
committed
BUG: fixed Series.replace with later replacements clobbering earlier ones. Still need DataFrame fix
1 parent f4655f3 commit b874d83

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

pandas/core/frame.py

-1
Original file line numberDiff line numberDiff line change
@@ -2956,7 +2956,6 @@ def _interpolate(self, to_replace, method, axis, inplace, limit):
29562956
else:
29572957
return self._constructor(new_data)
29582958

2959-
29602959
def _replace_dest_dict(self, to_replace, value, inplace):
29612960
rs = self if inplace else self.copy()
29622961
for k, v in value.iteritems():

pandas/core/series.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -2242,8 +2242,12 @@ def _rep_dict(rs, to_rep): # replace {[src] -> dest}
22422242
dd = {} # group by unique destination value
22432243
[dd.setdefault(d, []).append(s) for s, d in to_rep.iteritems()]
22442244

2245+
masks = {}
22452246
for d, sset in dd.iteritems(): # now replace by each dest
2246-
rs = _rep_one(rs, sset, d)
2247+
masks[d] = com.mask_missing(rs.values, sset)
2248+
2249+
for d, m in masks.iteritems():
2250+
np.putmask(rs.values, m, d)
22472251
return rs
22482252

22492253
if np.isscalar(to_replace):

pandas/tests/test_series.py

+4
Original file line numberDiff line numberDiff line change
@@ -2668,6 +2668,10 @@ def test_replace(self):
26682668
self.assertRaises(ValueError, ser.replace, [1,2,3], [np.nan, 0])
26692669
self.assertRaises(ValueError, ser.replace, xrange(1,3), [np.nan, 0])
26702670

2671+
ser = Series([0, 1, 2, 3, 4])
2672+
result = ser.replace([0, 1, 2, 3, 4], [4, 3, 2, 1, 0])
2673+
assert_series_equal(result, Series([4, 3, 2, 1, 0]))
2674+
26712675
def test_asfreq(self):
26722676
ts = Series([0., 1., 2.], index=[datetime(2009, 10, 30),
26732677
datetime(2009, 11, 30),

0 commit comments

Comments
 (0)