Case conversion with python regular expression back reference within pandas

Viewed 44

I would like to do following:

data={'Name':['Mcdonald']}
df=pandas.DataFrame(data)
df['Name'] = df['Name'].replace('Mc([a-z])', "Mc"+r'\1'.upper(), regex=True)

Expected result: McDonald

Given result: Mcdonald

Any suggestions?

1 Answers

Use .str.replace:

df["Name"] = df["Name"].str.replace(
    r"(?<=Mc)([a-z]+)", lambda g: g.group(1).title(), regex=True
)
print(df)

Prints:

       Name
0  McDonald
1  McArthur

df used:

       Name
0  Mcdonald
1  Mcarthur
Related