You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame列含数字前缀字符串替换失败问题求助

问题原因

你用的replace方法默认是完全匹配整个字符串,当列值是1.Goalkeeper时,和字典里的Goalkeeper完全不匹配,所以替换失效;而不带数字前缀的Goalkeeper能完全匹配,因此可以正常替换。

解决方案

方法1:开启正则匹配(最简方案)

修改代码,给replace加上regex=True参数,让字典的键作为正则模式匹配字符串中的子串:

replace_dict = {
    'Goalkeeper':'GK',
    'Left-Back':'LI',
    'Defensive Midfield':'MCD',
    'Right Midfield':'MD',
    'Attacking Midfield':'MP',
    'Right Winger':'ED',
    'Centre-Forward':'DC',
    'Centre-Back':'DFC',
    'Right-Back':'LD',
    'Central Midfield':'MC',
    'Second Striker':'SD',
    'Left Midfield':'MI',
    'Left Winger':'EI',
    'N':'',
    'None':'',
    'Sweeper':'DFC'
}

df2['Posicion'] = df2['Posicion'].replace(replace_dict, regex=True)

开启regex=True后,不管字符串前面有没有数字+点的前缀,只要后面的位置名称和字典键匹配,就会自动替换对应的部分。

方法2:精准匹配前缀(更可控)

如果需要确保只替换带数字前缀的内容,或者要更精准控制替换逻辑,可以用正则分组保留前缀,再替换位置名称:

import re

pos_map = {
    'Goalkeeper':'GK',
    'Left-Back':'LI',
    'Defensive Midfield':'MCD',
    'Right Midfield':'MD',
    'Attacking Midfield':'MP',
    'Right Winger':'ED',
    'Centre-Forward':'DC',
    'Centre-Back':'DFC',
    'Right-Back':'LD',
    'Central Midfield':'MC',
    'Second Striker':'SD',
    'Left Midfield':'MI',
    'Left Winger':'EI',
    'N':'',
    'None':'',
    'Sweeper':'DFC'
}

def replace_pos(s):
    # 匹配数字+点开头的格式
    match = re.match(r'(\d+\.)(.*)', s)
    if match:
        # 保留前缀,替换后面的位置名
        return match.group(1) + pos_map.get(match.group(2), match.group(2))
    # 无前缀的情况直接替换
    return pos_map.get(s, s)

df2['Posicion'] = df2['Posicion'].apply(replace_pos)
核心要点
  • Pandas的replace默认regex=False,仅匹配完整字符串,无法处理带前缀的子串替换。
  • 开启regex=True后,会将字典键作为正则表达式,匹配字符串中的任意子串,从而实现你需要的部分替换效果。

内容的提问来源于stack exchange,提问作者Carlos Lozano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:15:36