【问题标题】:Pandas split name column into last and first name ignore middle name python熊猫将名称列拆分为姓氏和名字忽略中间名python
【发布时间】:2021-07-15 16:48:43
【问题描述】:

仍在学习熊猫,所以请像我是新手一样解释一下。 :) 我的 pandas 10,000 行 x 5 列数据框包含这样的名称,

name_df = pd.DataFrame({'name':['Sanchez, Rick U D','Smith, Jerry C','Smith, Beth Space', 'Smith I, Morty', 'Smith, Summer']})
     name
0    Sanchez, Rick U D
1    Smith, Jerry C
2    Smith, Beth Space
3    Smith I, Morty
4    Smith, Summer   

要求是,

  • name 分成两列first_namelast_name
  • 如果有中间名,它会从 df 中删除。只有名字和姓氏。
  • 逗号已删除
  • 以“Jr、I、II、III 等”结尾的姓氏被移除

想要的输出是,

     last_name  first_name
0    Sanchez    Rick
1    Smith      Jerry
2    Smith      Beth
3    Smith      Morty
4    Smith      Summer 

到目前为止,我所拥有的如下。我可以将name 列拆分为两个单独的列,但不知道如何从first_namelast name 中删除中间名。

import pandas as pd
name_df[['last_name','first_name']] = name_df['name'].loc[name_df['name'].str.split().str.len() == 2].str.split(expand=True)
name_df['last_name'].str.replace(',','')

当前输出:

     last_name  first_name
0    NaN        NaN
1    NaN        NaN
2    NaN        NaN
3    NaN        NaN
4    Smith,     Summer 

【问题讨论】:

  • 人们通常不会称自己为James Smith I(除非他们是一位非常有远见的君主或其他人)。您应该确保 Smith I 没有截断一些有意义的内容,例如全名“Smith Ismay”。有人有两个单词的名字也是不可信的。
  • 这是一个类似“Charles Window the 3rd”的数字。在数据集中,名字写成“Window III, Charles”。公平点虽然验证一切。这是一个非常混乱的数据集。
  • 您的问题解决了吗?如果是这样,请尝试考虑 accepting 向其他人发出问题已解决的信号。如果没有,您可以提供反馈,以便改进(或完全删除)答案

标签: python pandas


【解决方案1】:

你可以使用split() 2次:

out=name_df['name'].str.split(', ',expand=True)
out[1]=out[1].str.split(' ',1).str[0]
out[0]=out[0].str.split(' ').str[0]
out.columns=['last_name','first_name']

out 的输出:

  last_name     first_name
0   Sanchez     Rick
1   Smith       Jerry
2   Smith       Beth
3   Smith       Morty
4   Smith       Summer

【讨论】:

  • Lloyd George, David en.wikipedia.org/wiki/David_Lloyd_George 怎么样?此代码会将 Earl Lloyd-George 的姓氏截断为 Lloyd。或者也许是一个历史上不太遥远的例子,Bonham Carter, Helena?
  • @ifly6 先生 op 也想删除中间名,以便它可以工作 :)
  • 大卫劳埃德乔治有一个名字David和姓氏Lloyd George。拆分空格会将他的姓氏的第一部分误解为实际姓氏,而将George 误解为中间名。 Bonham Carter, Helena 出现完全相同的问题:您的代码会将她的名字呈现为Helena Bonham,截断Carter
猜你喜欢
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多