如何使用正则表达式提取pandas列中连续的三位数字?
问题原因
当前写法无法得到预期结果的核心原因:
str.findall会返回所有匹配结果组成的列表,无匹配结果时直接取下标[0]会返回NaN,str.extract更适合提取首个符合规则的匹配内容,语法更简洁- 出现
01-1这类包含非数字字符的匹配结果,说明你实际使用的正则存在笔误,标准\d仅匹配0-9的数字字符,不会匹配横杠、点等特殊符号
解决代码
直接使用str.extract匹配连续三位数字即可:
df['col'].astype(str).str.extract(r'(\d{3})', expand=False)
如果需要严格过滤从更长数字串中截取三位的情况(比如12345不会被错误匹配到123),可以加数字边界断言:
df['col'].astype(str).str.extract(r'(?<!\d)(\d{3})(?!\d)', expand=False)
效果验证
- 输入
GF-01-1 G.888 SSRS,输出:888 - 输入
MMS1-CG343 SSRS,输出:343
内容的提问来源于stack exchange,提问作者nilsinelabore
相关产品推荐
相关产品推荐

