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
- 2段姓名
内容的提问来源于stack exchange,提问作者Scythor
相关产品推荐
相关产品推荐

