如何提取DataFrame中Amend/Amendment后的三位修订编号?
Pandas提取合同修订编号实现方案
核心思路
用pandas字符串方法的正则提取能力,精准匹配Amend/Amendment前缀后跟随的三位数字,未命中规则的行统一填充指定值。
完整实现代码
import pandas as pd # 构造示例测试数据 df = pd.DataFrame({ 'Contract': [ 'Amend 001 randomgibberish', 'Amend 010 randomgibberish', 'Amendment 003 randomgibberish', 'randomgibberish 002', 'randomgibberish 100' ] }) # 正则匹配提取编号,未匹配项填充NotFound df['Amendment'] = df['Contract'].str.extract( r'Amend(?:ment)?\s+(\d{3})', expand=False ).fillna('NotFound')
规则说明
正则表达式r'Amend(?:ment)?\s+(\d{3})'的匹配逻辑完全贴合需求:
Amend(?:ment)?:同时匹配Amend和Amendment两个前缀,非捕获组不会干扰目标内容提取\s+:匹配前缀和数字之间的一个或多个空白字符,兼容多空格、制表符等分隔场景(\d{3}):捕获连续三位数字作为提取结果,自动保留前导零格式
结果验证
运行代码后打印DataFrame,输出完全符合预期:
Contract Amendment 0 Amend 001 randomgibberish 001 1 Amend 010 randomgibberish 010 2 Amendment 003 randomgibberish 003 3 randomgibberish 002 NotFound 4 randomgibberish 100 NotFound
适配调整提示
- 如果实际数据中前缀和数字之间可能没有空格,可将正则里的
\s+替换为\s*,兼容零个或多个空白的场景 - 如果需要匹配大小写不敏感的场景(比如amend、AMEND),可以在extract方法前加
.str.lower()统一转小写后再匹配
内容的提问来源于stack exchange,提问作者Mitchell
相关产品推荐
相关产品推荐

