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

PySpark实现:基于空格与连字符从姓名列提取多值生成新列

提取DataFrame中姓名的名与中间名

需求说明

处理包含forenames列的Pandas DataFrame,生成两个新列:

  • first_name:提取forenames中第一个空格前的完整字符串(含连字符时完整保留)
  • middle_name:提取first_name之后第一个空格开始的所有剩余内容

输入示例

forenamesfirst_name
IVO-KAI ROGERSIVO-KAI
DYLAN STUART JOHNDYLAN
JOSH JACKJOSH
MONALISA ELIENMONALISA
RACHEL-GREEN JOERACHEL-GREEN

预期输出

forenamesfirst_namemiddle_name
IVO-KAI ROGERSIVO-KAIROGERS
DYLAN STUART JOHNDYLANSTUART JOHN
JOSH JACKJOSHJACK
MONALISA ELIENMONALISAELIEN
RACHEL-GREEN JOERACHEL-GREENJOE

解决方案

方法一:使用str.split分割(简单直观)

利用Pandas的字符串分割方法,仅分割第一个空格,直接得到两部分内容:

import pandas as pd

# 构造示例数据
data = {
    'forenames': [
        'IVO-KAI ROGERS',
        'DYLAN STUART JOHN',
        'JOSH JACK',
        'MONALISA ELIEN',
        'RACHEL-GREEN JOE'
    ]
}
df = pd.DataFrame(data)

# 按第一个空格分割,展开为两列
split_cols = df['forenames'].str.split(' ', n=1, expand=True)

# 赋值到新列
df['first_name'] = split_cols[0]
# 处理无中间名的情况,用空字符串填充NaN
df['middle_name'] = split_cols[1].fillna('')

方法二:使用正则表达式提取(灵活适配复杂场景)

通过正则精准匹配目标内容,适合需要更复杂规则的场景:

import pandas as pd

# 构造示例数据(同上)
data = {
    'forenames': [
        'IVO-KAI ROGERS',
        'DYLAN STUART JOHN',
        'JOSH JACK',
        'MONALISA ELIEN',
        'RACHEL-GREEN JOE'
    ]
}
df = pd.DataFrame(data)

# 提取第一个空格前的所有非空格字符(含连字符)作为first_name
df['first_name'] = df['forenames'].str.extract(r'^([^\s]+)', expand=False)

# 提取第一个空格后的所有内容作为middle_name,无内容时填充空字符串
df['middle_name'] = df['forenames'].str.extract(r'^\S+\s(.*)', expand=False).fillna('')

两种方法运行后,都能得到符合预期的DataFrame结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:01:19