如何用Pandas str.extract()提取符合规则的指定长度字母数字串?
从Pandas字符串列提取符合规则的首个字母数字串
原始数据
你的DataFrame中description列数据如下:
df['description'] # 输出: # 22CI003294 PARCEL 32 # 22CI400040 NORFOLK ESTATES # 12CI400952 & 13CI403261 # 22CI400628 GARDEN ACRES # 9CI00208 FERNHAVEN SEC # 22CI400675 CECIL AVE SUB # 22CI400721 124.69' SS # BOLLING AVE SS
需求
提取每个字符串中首个满足以下规则的字母数字串:
- 长度至少6个字符
- 以数字开头
- 后续可包含任意数量的数字或字母
无符合条件的串时返回None
问题分析
你之前的代码df['description'].str.extract(r'(\d*\w+\d+\w*){6,}')失效的原因是:{6,}是对括号内的整个匹配组重复6次以上,而不是要求匹配的字符串总长度≥6。这完全不符合需求,所以无法匹配到任何结果。
解决方案
使用正确的正则表达式来匹配符合长度和格式要求的串:
import pandas as pd import numpy as np # 假设df是你的目标DataFrame df['results'] = df['description'].str.extract(r'(\d\w{5,})', expand=False) # 将无匹配时的NaN替换为None,与预期结果一致 df['results'] = df['results'].replace(np.nan, None)
正则说明
\d:匹配开头的数字,确保串以数字开头\w{5,}:匹配至少5个字母或数字(\w等价于[A-Za-z0-9_],如果不需要下划线可替换为[A-Za-z0-9]),加上前面的1个数字,总长度≥6,满足长度要求str.extract会提取第一个匹配到的符合规则的串,无匹配时返回NaN,最后替换为None即可得到预期结果
验证结果
运行后df['results']的输出与你的预期完全一致:
22CI003294 22CI400040 12CI400952 22CI400628 9CI00208 22CI400675 22CI400721 None
内容的提问来源于stack exchange,提问作者amnesic
相关产品推荐
相关产品推荐

