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

如何在Pandas中拆分含多词名或多词姓的全名?解决拆分时列长度不匹配问题

Pandas 拆分含多单词的姓名:解决方案汇总

刚好最近处理过不少类似的姓名拆分需求,给你整理两个最常用的简便方案,完美解决你遇到的问题:

1. 姓氏包含2个及以上单词的拆分场景

这种情况我们默认名字是全名的第一个单词,剩下的所有内容都是姓氏(比如 "John van der Saar" 里,John 是名字,van der Saar 是完整姓氏)。用 str.split() 加一个参数就能搞定:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    "full_name": ["John van der Saar", "Alice Smith", "Bob de la Cruz"]
})

# 只在第一个空格处拆分,expand=True 直接生成两列
df[["first_name", "last_name"]] = df["full_name"].str.split(n=1, expand=True)

这里的 n=1 是关键:它限制拆分只执行一次,不管姓氏有多少个单词,都会完整保留在 last_name 列里。

2. 名字包含多个单词,且解决 split 报错问题

你遇到的 columns should be the same length 报错,本质是默认的 str.split() 会拆分所有空格,导致不同行的拆分结果长度不一致(比如 "Mary Ann Louise Brown" 拆分后是4个元素,而 "Tom Jones" 是2个),无法直接赋值给两列。

这种场景我们默认姓氏是全名的最后一个单词,前面的所有内容都是名字,用从右往左拆分的 str.rsplit() 就能解决:

# 示例数据
df = pd.DataFrame({
    "full_name": ["Mary Ann Louise Brown", "Tom Jones", "David Michael Wilson"]
})

# 从右侧只拆分一次,确保姓氏单独成列
df[["first_name", "last_name"]] = df["full_name"].str.rsplit(n=1, expand=True)

rsplit(n=1) 会从字符串末尾开始找第一个空格拆分,不管名字有2个还是N个单词,都会合并成 first_name 列,姓氏单独在 last_name 列,完全避免了长度不匹配的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:27:28