2016-07-21 2 views
4

У меня есть панд dataframe, содержащий (помимо других столбцов) полные имена:Split колонок панды и добавить последний элемент в новый столбец

fullname 
martin master 
andreas test 

Я хочу, чтобы создать новый столбец, который расщепляет столбец FULLNAME вдоль заготовки space и присваивает последний элемент новому столбцу. Результат должен выглядеть следующим образом:

fullname   lastname 
martin master  master 
andreas test  test 

Я думал, что это будет работать так:

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

Однако я получаю KeyError: -1

Я использую [-1], что является последним элементом раскола чтобы убедиться, что я получу настоящую фамилию. В некоторых случаях (например, такое имя, как andreas martin master), это помогает получить фамилию, то есть мастер.

Так как я могу это сделать?

+0

вы можете сделать это в одном кадре: 'ДФ [[ 'first_name', 'last_name']] = D [ ''] FULLNAME str.split (. '', expand = True) ' – MaxU

+0

Или лучше' df [['first_name', 'last_name']] = df ['fullname']. str.split (expand = True) ' – jezrael

ответ

4

Вам нужно другой str получить доступ к последней шпагат для каждой строки, что вы сделали по существу индексировать серии с использованием несуществующей метки:

In [31]: 

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

Если нужно создать 2 новых столбцов, используйте str.rsplit с параметром n=1. Если нужно только последний столбец, EdChum решение лучше:

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 
Смежные вопросы