在Pandas中对列字符串进行替换并保留指定有效内容
Pandas数据清洗:批量处理SHIPMENT_PROVIDER列的两种字符串替换场景
针对你需要处理的SHIPMENT_PROVIDER列字符串替换需求,你可以通过优先匹配更长目标字符串的正则策略,一次性覆盖两种场景:
需求回顾
- 保留原始的
Usps和Usps International - 将
Usps后接随机字符的内容(如Uspsxy3)替换为Usps - 将
Usps International后接随机字符的内容(如Usps Internationalxyz)替换为Usps International
解决方案代码
推荐使用字典形式的正则替换,逻辑更清晰且能保证优先匹配更长的模式:
orders['SHIPMENT_PROVIDER'] = orders['SHIPMENT_PROVIDER'].replace( { r'^(Usps International)[a-zA-Z0-9]+$': r'\1', r'^(Usps)[a-zA-Z0-9]+$': r'\1' }, regex=True )
逻辑说明
- 正则规则按从长到短的顺序排列,确保
Usps Internationalxxx这类字符串会被第一条规则优先匹配,替换为捕获到的Usps International - 第二条规则处理剩下的
Uspsxxx格式字符串,替换为捕获到的Usps - 原始的
Usps和Usps International因为没有后续随机字符,不会被任何规则匹配,保持原样
也可以用单个正则表达式实现,利用分支匹配的优先级:
orders['SHIPMENT_PROVIDER'] = orders['SHIPMENT_PROVIDER'].replace( to_replace=r'^(Usps International)([a-zA-Z0-9]+)$|^(Usps)([a-zA-Z0-9]+)$', value=r'\1\3', regex=True )
这里正则分支会先尝试匹配前半部分的Usps International模式,匹配失败才会尝试后半部分的Usps模式,替换时取对应捕获组的内容。
内容的提问来源于stack exchange,提问作者Gordan84
相关产品推荐
相关产品推荐

