Python解析含名称与数字的字符串列时如何提取末尾带正负号的数值
解决方案
核心逻辑是利用正则的末尾锚定规则,仅匹配字符串末尾带+/-前缀的数值,同时贪婪匹配前面所有内容作为球队名,不需要复杂的循环校验。
修正后代码
# 直接提取两列,expand=True保证返回DataFrame dt[['Name2', 'Name3']] = dt['Name'].str.extract(r'^(.*)\s([+-]\d+\.?\d*)$', expand=True) # 如果需要将Name3转为数值类型,可额外执行 dt['Name3'] = pd.to_numeric(dt['Name3'])
正则说明
^:匹配字符串开头(.*):第一个捕获组,贪婪匹配所有字符,直到满足后面的规则为止,对应完整球队名\s:匹配数值前的最后一个空格([+-]\d+\.?\d*):第二个捕获组,强制以+或-开头,后面跟整数/小数格式的数值,对应需要提取的数值部分$:匹配字符串结尾,强制要求数值部分必须在整段文本的最后,避免匹配到队名中间的数字
效果验证
针对所有示例格式都可以正确拆分:
| 原始Name列值 | Name2提取结果 | Name3提取结果 |
|---|---|---|
| New Orleans Saints +2 | New Orleans Saints | +2 |
| San Francisco 49ers +5 | San Francisco 49ers | +5 |
| San Francisco 49ers -5 | San Francisco 49ers | -5 |
| San Francisco 49ers +8.5 | San Francisco 49ers | +8.5 |
| San Francisco 49ers -8.5 | San Francisco 49ers | -8.5 |
内容的提问来源于stack exchange,提问作者nbafan249
相关产品推荐
相关产品推荐

