You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则提取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\-]+)提取目标内容:支持字母、数字、横杠格式的编号,完全覆盖示例需求

原代码错误原因

  1. 第一个正则写法冗余,\**无实际作用,未加捕获组,也没有覆盖ste、#等标识,没有适配大小写
  2. 第二个写法错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:27:02