提取条件中间名和姓氏

时间:2019-06-27 04:38:50

标签: pandas

我在数据框中有一个列,该列的全名是名字,中间名是姓,但是对于某些记录,没有中间名可用,并且想要确保根据可用模式有条件地填充中间名,但是不知道如何实现这一目标。

import pandas as pd

name_df = pd.read_csv(r"NameData1.txt",delimiter=",")
splitted_name=name_df.name.str.split(' ',expand=True).fillna('No Value')
##splited_name['middle_name']= splited_name.apply(lambda x : x[1] if x[2] != 'No Value' else '' )
name_df['Middle_name']=name_df.apply(lambda splited_name : splited_name[1] if splited_name[2] != 'No Value' else '')
name_df

我只想在中间出现中间名时显示中间名。

样本记录:

Id,name
1,TOM M SMITH
2,Gary SMITH 
3,John C Doe
4,Hary Knox
5,Rakesh Vaidya
6,John Doe Doe

2 个答案:

答案 0 :(得分:1)

使用numpy.where按条件设置新列,此处Series.isna测试了None的值:

splitted_name=name_df.name.str.split(expand=True)
name_df['First_name'] = splitted_name[0]
name_df['Middle_name']= np.where(splitted_name[2].notna(), splitted_name[1], '')
name_df['Last_name']= np.where(splitted_name[2].notna(), splitted_name[2], splitted_name[1])
print (name_df)
   Id           name First_name Middle_name Last_name
0   1    TOM M SMITH        TOM           M     SMITH
1   2     Gary SMITH       Gary                 SMITH
2   3     John C Doe       John           C       Doe
3   4      Hary Knox       Hary                  Knox
4   5  Rakesh Vaidya     Rakesh                Vaidya
5   6   John Doe Doe       John         Doe       Doe

答案 1 :(得分:1)

  

我只想显示中间名,否则应该填写姓氏。

因此,您可以使用str.split()执行以下操作:

df['middle_or_last']=df.name.apply(lambda x:x.split(' ', maxsplit=len(x.split()))).str[1]
print(df)

   Id           name middle_or_last
0   1    TOM M SMITH              M
1   2    Gary SMITH           SMITH
2   3     John C Doe              C
3   4      Hary Knox           Knox
4   5  Rakesh Vaidya         Vaidya
5   6   John Doe Doe            Doe