从字符串中提取字词的最后一个作为熊猫中的新列

时间:2019-06-22 15:42:17

标签: python string pandas dataframe

我正在努力根据另一列中的字符串创建两个新列。

我有什么

     Profile
0    Technician
1    Service Engineer
2    Sales and Service Support Engineer

我想拥有的东西

     First              Last
0    Technician         NaN
1    Service            Engineer
2    Sales              Engineer

我的尝试是使用

之类的解决方案
new = tl['Profile'].str.split(' ')
tl['First'] = new[0]
tl['Last'] = new[1]

但这仅适用于First。

2 个答案:

答案 0 :(得分:2)

在这里尝试str.extract

df['Profile'].str.extract(r'^(?P<First>\S+).*?(?P<Last>\S+)?$')

        First      Last
0  Technician       NaN
1     Service  Engineer
2       Sales  Engineer

没有很多str方法会如此优雅,因为额外的需要只处理一个单词的句子。


您也可以在此处使用str.partition

u = df['Profile'].str.partition()
pd.DataFrame({'First': u[0], 'Last': u[2].str.split().str[-1]})

        First      Last
0  Technician       NaN
1     Service  Engineer
2       Sales  Engineer

答案 1 :(得分:1)

不使用正则表达式,使用循环

姓氏

k=[]
for i in df_names_test['Name']:
    h=len(i.split(" "))
    j=i.split(" ")[h-1]
    k.append(j)


df_names_test["Last"]=k

名字

k=[]
for i in df_names_test['Name']:

    j=i.split(" ")[0]
    k.append(j)


df_names_test["First"]=k

使用Lambda函数: 名

df_names_test['First']=df_names_test['Name'].apply(lambda x: x.split(" ")[0])

姓:

df_names_test['Last']=df_names_test['Name'].apply(lambda x: x.split(" ")[-1])