如何在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
相关产品推荐
相关产品推荐

