【问题标题】:Optimizing pandas operation: combining first/middle/last name columns优化 pandas 操作:组合名字/中间名/姓氏列
【发布时间】:2020-05-06 14:22:53
【问题描述】:

假设我抽取了一些名称样本,例如由各个字段分隔的名称:

indx  First Name   Middle Name     Last Name
0     CHARITIXAN   K.R.,           NICHOLS
1           None   Johnny-Boy      CHAVEZ
2          ISAAC   None            ESPARZA
3        MICHAEL   nan             
4         Andrew                   Pfaff

我们还假设这些数据被格式化为 pandas 数据框 (df) 和 已经完成了足够的清洁(通过.replace 方法) 剩下的值只是被占用的字符串或空字符串。

indx  First Name   Middle Name     Last Name
0     CHARITIXAN   K.R.,           NICHOLS
1                  Johnny-Boy      CHAVEZ
2          ISAAC                   ESPARZA
3        MICHAEL               
4         Andrew                   Pfaff

我想正确地将给定名称的所有部分与一个单独的名称组合在一起 每个名称段之间的空间。根据我的研究和实施, 我找到的最佳解决方案是this - 使用的是re。这是最佳方式还是存在 对于这种特殊情况有更好的选择吗?

我的最终方法是这样的:

df['full_name']=df[['First Name', 'Middle Name', 'Last Name']].apply(lambda x: re.sub(' +', ' ', ' '.join(x)), axis=1)

【问题讨论】:

  • 你不能把它们加在一起吗df['full_name']=df['First Name'] +' ' + df['Middle Name'] + ' ' + df['Last Name']
  • @kenan 如果中间名或姓氏为空,则不是“只有一个空格”。
  • 假设名称是您的列列表df[names].apply(lambda x : x.str.cat(sep=' '),axis=1)

标签: python pandas lambda apply


【解决方案1】:

您可以申请加入:

df['full_name'] = df[['First Name','Middle Name', 'Last Name']].apply(lambda x: ' '.join(x), axis=1)

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2021-11-03
    • 2013-03-26
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多