You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将姓名拆分为名、中间名、姓列(兼容多段姓名)

可变段数姓名拆分:提取first/middle/last name

解决方案代码

首先构造测试数据并执行拆分逻辑:

import pandas as pd

# 构造测试数据集
data = {
    'name': [
        'John Smith',
        'Jack A Doe',
        'Jane Marie Jones Smith',
        'Josh Jacob Jingle Hiemer Schmidt'
    ]
}
df = pd.DataFrame(data)

# 拆分姓名为多列
name_parts = df['name'].str.split(expand=True)

# 提取first name:姓名的第一部分
df['first_name'] = name_parts[0]

# 提取last name:姓名的最后一部分
df['last_name'] = name_parts.iloc[:, -1]

# 提取middle name:中间所有部分拼接,自动忽略空值
df['middle_name'] = name_parts.iloc[:, 1:-1].apply(
    lambda row: ' '.join(row.dropna().astype(str)), axis=1
)

# 整理结果列
result_df = df[['first_name', 'middle_name', 'last_name']]
print(result_df)

输出结果

first_name       middle_name last_name
0       John                           Smith
1       Jack                A        Doe
2       Jane           Marie Jones     Smith
3       Josh  Jacob Jingle Hiemer   Schmidt

问题修正说明

你之前的错误在于将name_parts.iloc[:,1]作为last name,这错误地取了姓名的第二部分。正确逻辑是:

  • first name:固定取姓名的第一个部分
  • last name:固定取姓名的最后一个部分
  • middle name:取姓名中除首尾之外的所有部分,用空格拼接成字符串

关键逻辑细节:

  • name_parts.iloc[:, -1]:通过负索引直接定位每行的最后一列,适配任意长度的姓名
  • name_parts.iloc[:, 1:-1]:提取从第二列到倒数第二列的所有中间段
  • row.dropna():自动过滤空值,避免短姓名(如2段姓名)产生多余空格

内容的提问来源于stack exchange,提问作者Coding_Nubie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:38:20