如何在Pandas数据框中替换逗号并插入&符号处理人名?
姓名格式转换解决方案
数据集
import pandas as pd df = pd.DataFrame({'name':{0: 'John,Smith', 1: 'Peter,Blue', 2:'Larry,One,Stacy,Orange' , 3:'Joe,Good' , 4:'Pete,High,Anne,Green'}})
原始输出:
name 0 John,Smith 1 Peter,Blue 2 Larry,One,Stacy,Orange 3 Joe,Good 4 Pete,High,Anne,Green
需求
- 将逗号替换为单个空格
- 当单元格包含两个人名时,在第一个人的姓氏后、第二个人的名字前插入“&”符号
期望输出:
name 0 John Smith 1 Peter Blue 2 Larry One & Stacy Orange 3 Joe Good 4 Pete High & Anne Green
尝试的代码(仅实现逗号替换)
df['name']= df['name'].str.replace(r',', '', regex=True)
解决方案
可以通过正则表达式替换同时完成两个需求,以下两种方法任选:
方法一:分步处理
先统一替换逗号为空格,再针对双姓名结构插入&:
# 替换所有逗号为空格 df['name'] = df['name'].str.replace(',', ' ', regex=True) # 匹配"名 姓 名 姓"结构,在中间插入& df['name'] = df['name'].str.replace(r'(\w+ \w+) (\w+ \w+)', r'\1 & \2', regex=True)
方法二:单正则一次性完成
匹配不同逗号分隔的姓名结构,分别处理:
df['name'] = df['name'].str.replace( r'(\w+),(\w+),(\w+),(\w+)', r'\1 \2 & \3 \4', regex=True ).str.replace(r'(\w+),(\w+)', r'\1 \2', regex=True)
逻辑说明
- 第一个正则
(\w+),(\w+),(\w+),(\w+)匹配四个逗号分隔的片段(对应两个完整姓名:名+姓,名+姓),替换时将逗号转为空格并在中间插入& - 第二个正则
(\w+),(\w+)匹配两个逗号分隔的片段(单个姓名),仅将逗号转为空格
免责声明:本表中所有姓名均为虚构,无意与任何真实人物(在世或已故)产生关联或被推断关联。
内容的提问来源于stack exchange,提问作者josepmaria
相关产品推荐
相关产品推荐

