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

pandas拆分Full Name列报错及多段姓名正确拆分方法问询

pandas拆分Full Name列问题修复方案

正则报错bad character in group name 'First Name'修复

  • 报错原因:Python正则的命名捕获组(?P<组名>语法)不支持组名包含空格,原代码中?P<First Name>、?P<Last Name>的组名带空格,直接触发正则语法错误。
  • 修复方式:要么移除命名组内的空格,提取完成后再重命名列;要么不使用命名捕获组,按提取顺序直接赋值列名。
  • 额外提示:列重命名完成后,直接通过df4['Full Name']取目标列比iloc[:,27]按位置取值更稳妥,避免前置列增减导致索引错位取错列。

含中间名的多段姓名正确拆分实现

原str.split方法的缺陷:默认从左往右按所有空格拆分,遇到John Wayne Smith这类3段及以上的姓名会生成超过2列,直接赋值给First Name/Last Name两列时会出现错位、赋值失败的问题,无法自动将最后一个词识别为姓氏。

以下两种方案均可正确适配2段/多段姓名拆分,自动将最后一个词识别为Last Name,其余前缀部分(含中间名)识别为First Name:

方案1:修正正则的str.extract实现

# 提前清洗姓名列的多余空格(可选,避免首尾空格、连续空格导致拆分异常)
df4['Full Name'] = df4['Full Name'].str.strip().str.replace(r'\s+', ' ', regex=True)

# 正则规则:从开头匹配到最后一个空格前的所有内容作为名,结尾最后一个词作为姓
# 注意命名组无空格,规避语法错误
name_parts = df4['Full Name'].str.extract(
    r'^(?P<first>.+)\s+(?P<last>\w+)$',
    expand=True
)
# 重命名列后合并回原表
name_parts.columns = ['First Name', 'Last Name']
df4 = pd.concat([df4, name_parts], axis=1)

方案2:str.rsplit实现(更简洁)

使用rsplit从字符串右侧开始拆分,指定仅拆分1次,即可保证最后一个空格后的内容单独成列:

# 提前清洗姓名列多余空格
df4['Full Name'] = df4['Full Name'].str.strip().str.replace(r'\s+', ' ', regex=True)
# 从右往左拆分1次,直接赋值两列
df4[['First Name', 'Last Name']] = df4['Full Name'].str.rsplit(' ', n=1, expand=True)
  • 拆分效果验证:
    • 2段姓名Test Name:First Name=Test,Last Name=Name
    • 3段姓名John Wayne Smith:First Name=John Wayne,Last Name=Smith

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:27:19