PySpark实现:基于空格与连字符从姓名列提取多值生成新列
提取DataFrame中姓名的名与中间名
需求说明
处理包含forenames列的Pandas DataFrame,生成两个新列:
first_name:提取forenames中第一个空格前的完整字符串(含连字符时完整保留)middle_name:提取first_name之后第一个空格开始的所有剩余内容
输入示例
| forenames | first_name |
|---|---|
| IVO-KAI ROGERS | IVO-KAI |
| DYLAN STUART JOHN | DYLAN |
| JOSH JACK | JOSH |
| MONALISA ELIEN | MONALISA |
| RACHEL-GREEN JOE | RACHEL-GREEN |
预期输出
| forenames | first_name | middle_name |
|---|---|---|
| IVO-KAI ROGERS | IVO-KAI | ROGERS |
| DYLAN STUART JOHN | DYLAN | STUART JOHN |
| JOSH JACK | JOSH | JACK |
| MONALISA ELIEN | MONALISA | ELIEN |
| RACHEL-GREEN JOE | RACHEL-GREEN | JOE |
解决方案
方法一:使用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
相关产品推荐
相关产品推荐

