Pandas DataFrame列中使用正则删除序数后缀并保留ST街道标识的方法
解决方案
核心使用正则捕获组保留数字内容,仅删除紧跟在数字后的序数后缀(st/th/nd/rd),街道含义的ST前没有数字,不会被匹配到,不存在误删风险。
你之前的写法错误原因是替换值填写了正则匹配规则而非捕获组引用,会直接把匹配到的数字+后缀整体替换为字面量\d{1,},因此无法保留数字部分。
正则逻辑
(\d+):捕获1位及以上的数字,记为第1个捕获组(?:st|nd|rd|th):非捕获组,匹配所有常见的序数后缀- 新增忽略大小写参数适配大小写混合的场景
- 替换时用
\1引用第1个捕获组的数字,实现只删后缀留数字的效果
单字符串测试代码
import re test_val1 = 'E 18TH ST AND A AVE' test_val2 = 'E 31ST ST AND A AVE' pattern = re.compile(r'(\d+)(?:st|nd|rd|th)', re.IGNORECASE) print(pattern.sub(r'\1', test_val1)) # 输出:E 18 ST AND A AVE print(pattern.sub(r'\1', test_val2)) # 输出:E 31 ST AND A AVE
Pandas整列应用代码
假设你的DataFrame名为df,待处理的地址列名为address,可直接调用pandas字符串方法对整列生效:
import pandas as pd df['address'] = df['address'].str.replace( pat = r'(\d+)(?:st|nd|rd|th)', repl = r'\1', case = False, regex = True )
内容的提问来源于stack exchange,提问作者Pruthvi Reddy
相关产品推荐
相关产品推荐

