2016-07-21 40 views
4

我有一个包含熊猫数据框(除其他列)全名:拆分大熊猫柱和最后一个元素添加到新列

fullname 
martin master 
andreas test 

我想创建沿着空白分裂的全名专栏的一个新列空间并将最后一个元素分配给新列。结果应该是这样的:

fullname   lastname 
martin master  master 
andreas test  test 

我认为它会像这样工作:

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

不过,我得到一个KeyError: -1

我用[-1],那就是分裂的最后一个元素小组,以确保我得到真正的姓氏。在某些情况下(例如,名称为andreas martin master),这有助于获取姓氏,即主人

那么我该如何做到这一点?

+0

你可以在一杆做:'DF [ 'FIRST_NAME', '姓氏'] = DF [ '全名'] 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

如果需要创建两个新列,使用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