如何用正则提取pandas列中SUITE/ste/#等标识后的套房号码
pandas从地址列提取套房号解决方案
正确实现代码
首先导入依赖模块,直接调用pandas字符串处理的extract方法配合正则即可:
import re df_merged['SuiteNos'] = df_merged['address'].str.extract( r'(?:suite|ste\.?|#)\s*#?\s*([\w\-]+)', flags=re.IGNORECASE )
正则逻辑说明
- 非捕获组
(?:suite|ste\.?|#)匹配所有前置标识:不分大小写的suite、ste(支持ste后面带可选的英文点)、或者#字符 \s*#?\s*匹配标识和目标编号之间的内容:可选的空格、可选的#号、再可选的空格,适配SUITE #2这类格式- 捕获组
([\w\-]+)提取目标内容:支持字母、数字、横杠格式的编号,完全覆盖示例需求
原代码错误原因
- 第一个正则写法冗余,
\**无实际作用,未加捕获组,也没有覆盖ste、#等标识,没有适配大小写 - 第二个写法错误:
re.findall不能直接传入pandas Series对象,只能处理单个字符串,且正则里的@和[suite]字符组逻辑完全不符合需求
完整测试代码
你可以用示例数据直接验证效果:
import pandas as pd import re # 示例地址数据 data = {'address': [ '4230 Harding Pike Ste 435', '4230 Harding Pike Suite 435', '4230 Harding Pike SUITE A', '4230 Harding Pike Ste. 101', '4230 Harding Pike SUITE B-200', '4230 Harding Pike #900', '4230 Harding Pike STE 503', '4230 Harding Pike SUITE 300', '4230 Harding Pike Ste 700', '4230 Harding Pike SUITE #2' ]} df = pd.DataFrame(data) df['SuiteNos'] = df['address'].str.extract(r'(?:suite|ste\.?|#)\s*#?\s*([\w\-]+)', flags=re.IGNORECASE) print(df['SuiteNos'])
输出结果和预期完全一致。
内容的提问来源于stack exchange,提问作者user3447653
相关产品推荐
相关产品推荐

