如何用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:
| col1 | col2 | col3 | address |
|---|---|---|---|
| 1001234567 123 Main St, New York | 1001234567 | NaN | 123 Main St, New York |
| PR123456-7890 456 Oak Ave, Los Angeles | NaN | NaN | 456 Oak Ave, Los Angeles |
| DT987654-3210 789 Pine Rd, Chicago | NaN | DT987654-3210 | 789 Pine Rd, Chicago |
| 1009876543 DT112233-4455 101 Cedar Ln, Houston | 1009876543 | DT112233-4455 | 101 Cedar Ln, Houston |
| 8765432100 DT001122-3344 202 Birch Blvd, Miami | NaN | DT001122-3344 | 202 Birch Blvd, Miami |
扩展说明
如果需要同时支持DT和PR格式的编号,可将col3的正则改为:
df['col3'] = df['col1'].str.extract(r'((?:DT|PR)\d{6}-\d{4})')
内容的提问来源于stack exchange,提问作者Deidraak
相关产品推荐
相关产品推荐

