如何在Pandas中移除字符串大写字母前内容以清洗地名列?
问题分析与解决方案
你的代码问题出在正则表达式完全不符合需求:当前写的'ABCDEFGHIKLMNOPQRSTVXYZ'是匹配单个大写字母并替换为空,这和你要移除"town of "、"city of "前缀的目标完全无关,所以新列内容和原列一致。
正确的实现方式
方式1:修正原apply函数
把正则改成匹配开头的前缀,同时忽略大小写兼容不同格式:
import re def my_slicer(row): """提取纯地名,移除开头的town of/city of前缀""" return re.sub(r'^(town of |city of )', '', row['locality_name'], flags=re.IGNORECASE) raw_data['locality_name_only'] = raw_data.apply(my_slicer, axis=1)
方式2:更高效的向量化操作(推荐)
不用逐行apply,直接对DataFrame列使用向量化的字符串替换,速度更快:
import re # 支持匹配开头的town of/city of,忽略大小写 raw_data['locality_name_only'] = raw_data['locality_name'].str.replace( r'^(town of |city of )', '', regex=True, flags=re.IGNORECASE )
扩展说明
如果还有其他类似前缀(比如village of ),直接在正则里添加即可:
raw_data['locality_name_only'] = raw_data['locality_name'].str.replace( r'^(town of |city of |village of )', '', regex=True, flags=re.IGNORECASE )
内容的提问来源于stack exchange,提问作者Cpt_keaSar
相关产品推荐
相关产品推荐

