2016-08-18 33 views
3

McGill to McGill、Mcneill to McNeill、O'donnell to O'Donnellなど、名前の途中で大文字にする必要がある名前の列があります。pandas - 文字列内の1文字を大文字に置き換えます。

テキストエディターのなかには、キャプチャしたグループに\Uを追加することでこれを行うことができますが、これはパンダでは機能しません。

これは私が試みたものです。これも可能ですか?

import pandas as pd 
names = pd.Series(["Mcgill", "Mcneill", "O'donnell", "Mctavish"]) 

names.replace(r'\bMc([a-z])', r'Mc\U$1', inplace=True) 

答えて

3

あなたはre.sub()と組み合わせてapply()を使用することができます。

import pandas as pd, re 
names = pd.Series(["Mcgill", "Mcneill", "O'donnell", "Mctavish"]) 

def capitalize(name): 
    rx = re.compile(r'(?:(?<=Mc)|(?<=O\'))([a-z])') 

    def repl(m): 
     char = m.group(1) 
     return char.upper() 

    return rx.sub(repl,name) 

names = names.apply(capitalize) 
# 0  McGill 
# 1  McNeill 
# 2 O'Donnell 
# 3  McTavish 

はあなたが後何であったか、このですか?

+1

はい、それは美しく機能しました。ありがとうございました。 – robroc

関連する問題