Skip to content

Commit dd12965

Browse files
committed
Merge pull request #6778 from cpcloud/regex-false-replace
BUG: fix metacharacter replacement bug in DataFrame.replace()
2 parents 7d5fde7 + 0f031b7 commit dd12965

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

doc/source/release.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,8 @@ Bug Fixes
301301
- Bug in downcasting inference with empty arrays (:issue:`6733`)
302302
- Bug in ``obj.blocks`` on sparse containers dropping all but the last items of same for dtype (:issue:`6748`)
303303
- Bug in unpickling ``NaT (NaTType)`` (:issue:`4606`)
304-
- Bug in setting a tz-aware index directly via ``.index`` (:issue:`6785`)
304+
- Bug in ``DataFrame.replace()`` where regex metacharacters were being treated
305+
as regexs even when ``regex=False`` (:issue:`6777`).
305306

306307
pandas 0.13.1
307308
-------------

pandas/core/internals.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1555,7 +1555,7 @@ def replace(self, to_replace, value, inplace=False, filter=None,
15551555
def _replace_single(self, to_replace, value, inplace=False, filter=None,
15561556
regex=False):
15571557
# to_replace is regex compilable
1558-
to_rep_re = com.is_re_compilable(to_replace)
1558+
to_rep_re = regex and com.is_re_compilable(to_replace)
15591559

15601560
# regex is regex compilable
15611561
regex_re = com.is_re_compilable(regex)

pandas/tests/test_frame.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7857,6 +7857,15 @@ def test_regex_replace_numeric_to_object_conversion(self):
78577857
assert_frame_equal(res, expec)
78587858
self.assertEqual(res.a.dtype, np.object_)
78597859

7860+
def test_replace_regex_metachar(self):
7861+
metachars = '[]', '()', '\d', '\w', '\s'
7862+
7863+
for metachar in metachars:
7864+
df = DataFrame({'a': [metachar, 'else']})
7865+
result = df.replace({'a': {metachar: 'paren'}})
7866+
expected = DataFrame({'a': ['paren', 'else']})
7867+
tm.assert_frame_equal(result, expected)
7868+
78607869
def test_replace(self):
78617870
self.tsframe['A'][:5] = nan
78627871
self.tsframe['A'][-5:] = nan

0 commit comments

Comments
 (0)