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

如何用Pandas正则表达式提取单列中的三类指定数据?

解决方案:修正正则提取逻辑

明确提取规则

需要从col1中提取三类数据:

  • col2:以100开头的10位数字(格式:100 + 7位数字)
  • col3:DTXXXXXX-XXXX格式的编号(6位数字+连字符+4位数字)
  • address:街道(数字+街道名称)与城镇(逗号+城镇名称)的组合

示例数据集

先定义测试用的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'col1': [
        '1001234567 123 Main St, New York',
        'PR123456-7890 456 Oak Ave, Los Angeles',
        'DT987654-3210 789 Pine Rd, Chicago',
        '1009876543 DT112233-4455 101 Cedar Ln, Houston',
        '8765432100 DT001122-3344 202 Birch Blvd, Miami'
    ]
})

修正后的提取代码

核心是把错误的PR正则替换为DT,同时保留其他逻辑的正确性:

import re

# 提取100开头的10位数字
df['col2'] = df['col1'].str.extract(r'(100\d{7})')

# 提取DTXXXXXX-XXXX格式的编号(修正了原代码中PR的错误)
df['col3'] = df['col1'].str.extract(r'(DT\d{6}-\d{4})')

# 提取街道+城镇地址
df['address'] = df['col1'].str.extract(r'(\d+ [A-Za-z ]+, [A-Za-z ]+)')

运行结果

执行后得到目标格式的DataFrame:

col1col2col3address
1001234567 123 Main St, New York1001234567NaN123 Main St, New York
PR123456-7890 456 Oak Ave, Los AngelesNaNNaN456 Oak Ave, Los Angeles
DT987654-3210 789 Pine Rd, ChicagoNaNDT987654-3210789 Pine Rd, Chicago
1009876543 DT112233-4455 101 Cedar Ln, Houston1009876543DT112233-4455101 Cedar Ln, Houston
8765432100 DT001122-3344 202 Birch Blvd, MiamiNaNDT001122-3344202 Birch Blvd, Miami

扩展说明

如果需要同时支持DT和PR格式的编号,可将col3的正则改为:

df['col3'] = df['col1'].str.extract(r'((?:DT|PR)\d{6}-\d{4})')

内容的提问来源于stack exchange,提问作者Deidraak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:07