1

Been trying to replace all values matching a pattern in a pandas dataframe with the matched capture groups reversed. So Mouse, Mickey would be replaced with Mickey Mouse

Dataframe looks like:

+---+---------------+------+------+------+------+------+------+------+------+------+--+--+------+------+------+------+------+------+------+------+------+------+
|   |       0       |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  |  |  15  |  16  |  17  |  18  |  19  |  20  |  21  |  22  |  23  |  24  |
+---+---------------+------+------+------+------+------+------+------+------+------+--+--+------+------+------+------+------+------+------+------+------+------+
| 0 | Mouse, Mickey | None | None | None | None | None | None | None | None | None |  |  | None | None | None | None | None | None | None | None | None | None |
| 1 | Duck, Donald  | None | None | None | None | None | None | None | None | None |  |  | None | None | None | None | None | None | None | None | None | None |
+---+---------------+------+------+------+------+------+------+------+------+------+--+--+------+------+------+------+------+------+------+------+------+------+

Code:

df.replace(r'(.*),\s+(.*)', r'\2 \1', inplace=True)

No change in output. What am I doing wrong? Thanks!

APwYlder
  • 13
  • 3

1 Answers1

2

You need to specify regex=True; By default, DataFrame.replace method replaces values literally:

df = pd.DataFrame({"A": ["Mouse, Mickey", "Duck, Donald"]})

df.replace(r'(.*),\s+(.*)', r'\2 \1', inplace=True, regex=True)

df
#              A
#0  Mickey Mouse
#1  Donald Duck
Psidom
  • 209,562
  • 33
  • 339
  • 356