【发布时间】: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_name和last_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_name 或last 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 向其他人发出问题已解决的信号。如果没有,您可以提供反馈,以便改进(或完全删除)答案