2016-07-21 8 views
4

ich Pandas Datenrahmen haben, die (neben anderen Spalten) vollständigen Namen:Split Pandas Spalte und fügen letzte Element in eine neue Spalte

fullname 
martin master 
andreas test 

Ich möchte eine neue Spalte erstellen, die die Fullname Spalte entlang der Rohling spaltet Leerzeichen und weist das letzte Element einer neuen Spalte zu. Das Ergebnis sollte wie folgt aussehen:

fullname   lastname 
martin master  master 
andreas test  test 

Ich dachte, es so funktionieren würde:

df['lastname'] = df['fullname'].str.split(' ')[-1] 

Allerdings bekomme ich ein KeyError: -1

ich [-1] verwenden, das ist das letzte Element der geteilten Gruppe, um sicher zu sein, dass ich den richtigen Nachnamen bekomme. In einigen Fällen (z.B. ein Name wie andreas martin master) hilft dies, den Nachnamen zu erhalten, das heißt Master.

Also wie kann ich das tun?

+0

Sie es in einem Schuss tun: 'df [[ 'first_name', 'last_name']] = df [ 'fullname'] str.split (. '', expand = True) ' – MaxU

+0

Oder besser' df [['first_name', 'last_name']] = df ['fullname']. str.split (expand = True) ' – jezrael

Antwort

4

Sie benötigen eine andere str die letzten Splits für jede Zeile zugreifen zu können, was Sie getan haben im Wesentlichen die Serie Index versuchen wurde ein nicht existierendes Label mit:

In [31]: 

df['lastname'] = df['fullname'].str.split().str[-1] 
df 
Out[31]: 
     fullname lastname 
0 martin master master 
1 andreas test  test 
1

Wenn zwei neue Spalten erstellen müssen, verwenden Sie str.rsplit mit Parameter n=1. Wenn nur letzte Spalte benötigen, ist EdChum Lösung besser:

print (df) 
       fullname 
0   martin master 
1   andreas test 
2 andreas martin master 

df[['first_name','last_name']] = df['fullname'].str.rsplit(expand=True, n=1) 
print (df) 
       fullname  first_name last_name 
0   martin master   martin master 
1   andreas test   andreas  test 
2 andreas martin master andreas martin master