我有一个包含(除了其他列)全名的pandas数据框:
fullname
martin master
andreas test
我想创建一个新列,它沿着空格分割fullname列,并将最后一个元素分配给新列。结果应如下所示:
fullname lastname
martin master master
andreas test test
我认为它会像这样工作:
df['lastname'] = df['fullname'].str.split(' ')[-1]
但是,我得到KeyError: -1
我使用[-1]
,这是拆分组的最后一个元素,以确保我得到真正的姓氏。在某些情况下(例如像 andreas martin master 这样的名称),这有助于获取姓氏,即 master 。
那我怎么能这样做呢?
答案 0 :(得分:8)
您需要另一个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 :(得分:1)
如果需要创建2个新列,请使用带参数n=1
的{{3}}。如果只需要最后一列,str.rsplit
解决方案更好:
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