2017-05-16 1 views
1

ich eine Python Pandas Datenrahmen wie dieses:Extract Unterkette zwischen zwei Sonderzeichen aus einer Spalte von Pandas Dataframe

Name 
Jim, Mr. Jones 
Sara, Miss. Baker 
Leila, Mrs. Jacob 
Ramu, Master. Kuttan 

Ich mag würde nur Titel von Name-Spalte extrahieren und kopieren Sie sie in eine neue Spalte namens Titel. Ausgangsdatenrahmen sieht wie folgt aus:

Name     Title 
Jim, Mr. Jones   Mr 
Sara, Miss. Baker  Miss 
Leila, Mrs. Jacob  Mrs 
Ramu, Master. Kuttan Master 

Ich versuche, eine Lösung mit regex zu finden aber nicht das gewünschte Ergebnis zu finden.

+0

Wie würden Sie analysieren wie 'Nachname, Anna Maria' und' Ramu, Master Kuttan'? – MaxU

+0

Ich möchte nur Namen Titel analysieren. Das bedeutet Sub-String zwischen "," und "". " – raja

Antwort

0
In [157]: df['Title'] = df.Name.str.extract(r',\s*([^\.]*)\s*\.', expand=False) 

In [158]: df 
Out[158]: 
        Name Title 
0  Jim, Mr. Jones  Mr 
1  Sara, Miss. Baker Miss 
2  Leila, Mrs. Jacob  Mrs 
3 Ramu, Master. Kuttan Master 

oder

In [163]: df['Title'] = df.Name.str.split(r'\s*,\s*|\s*\.\s*').str[1] 

In [164]: df 
Out[164]: 
        Name Title 
0  Jim, Mr. Jones  Mr 
1  Sara, Miss. Baker Miss 
2  Leila, Mrs. Jacob  Mrs 
3 Ramu, Master. Kuttan Master 
+0

danke es hat funktioniert .. :) – raja

+0

@raja, froh, dass es hilft :) – MaxU

0

Werfen Sie einen Blick auf str.extract.

Die regexp, die Sie suchen, ist (?<=,)\w+(?=.). In Worten: Nimm den Teilstring, der , vorangestellt ist (aber nicht beinhaltet), besteht aus mindestens einem Wortzeichen und endet mit einem . (aber schließe nicht ein). Verwenden Sie in Zukunft einen Online-Regexp-Tester wie regex101; Regexps werden auf diese Weise eher trivial.

Dies wird davon ausgegangen, dass jeder Eintrag in der Name Spalte auf die gleiche Weise formatiert ist.

Verwandte Themen