You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何创建新列替换多值?重复处理职位拼写错误失效问题排查

职位名称批量替换问题的分析与解决方案

嘿,作为Python新手遇到这种问题很正常,咱们一步步拆解你的问题:

核心问题1:第二次替换覆盖了第一次的结果

你第一次处理Accountant的时候,把清理后的值存在了position_cleaned列里,但第二次处理Administrator的时候,你又从原始的position列重新生成position_cleaned——这就把之前已经替换好的27条Accountant给完全覆盖掉了!这是你看不到预期输出的最主要原因。

核心问题2:正则匹配的潜在优化点

你的正则用了\b(单词边界),这在匹配独立的错误拼写时没问题,但如果错误拼写是和其他字符连在一起的(比如你第一个列表里的AccountsAdministrator),\b可能无法正确匹配;另外正则默认区分大小写,如果你的数据里有混合大小写的错误拼写,匹配范围会受限。

修正后的代码示例

咱们把代码改成基于已清理的列做后续替换,同时优化正则的鲁棒性:

import re

# 第一次处理Accountant的错误拼写,增加大小写忽略增强匹配
accountant_errors = ['Aaccountant', 'Accountantsnt', 'Accountantant', 'Acauntant', 'Acccount', 'Acccountant', 'Accontant', 'Accosiate', 'Accounant', 'Accounet', 'Accountamt', 'Accountan', 'Accountanat', 'Accountans', 'Accountat', 'Accountat', 'Accountc', 'Accountend', 'Accountent', 'Accounter', 'Accountnat', 'Accountrepresentative', 'AccountsAdministrator', 'Accoutant', 'ACCOUTING', 'ACCOUTN', 'Accts', 'Accuontant', 'Acontent', 'Acoount', 'Acoount', 'Acount', 'Acountant', 'Acountante', 'Acountsnt', 'Accountantante', 'Accountantsnt']
accountant_pat = re.compile(r"\b(?:{})\b".format('|'.join(accountant_errors)), flags=re.IGNORECASE)
position_df['position_cleaned'] = position_df['position'].replace(accountant_pat, 'Accountant', regex=True)

# 检查第一次处理结果
print(position_df.position_cleaned.value_counts()) # 输出:Accountant 27

# 第二次处理Administrator的错误拼写,注意基于已清理的position_cleaned列操作!
administrator_errors = ['Adiministrative', 'Adimn', 'Admenstretiv', 'Admenstritive', 'Admi']
administrator_pat = re.compile(r"\b(?:{})\b".format('|'.join(administrator_errors)), flags=re.IGNORECASE)
position_df['position_cleaned'] = position_df['position_cleaned'].replace(administrator_pat, 'Administrator', regex=True)

# 现在就能看到Accountant和Administrator的正确计数了
print(position_df.position_cleaned.value_counts())

额外简化建议

可以把所有替换规则整理成一个字典,循环处理,避免重复代码也不容易出错:

# 定义替换映射:键是目标职位,值是对应的错误拼写列表
position_mapping = {
    'Accountant': ['Aaccountant', 'Accountantsnt', ...], # 你的完整错误列表
    'Administrator': ['Adiministrative', 'Adimn', ...]
}

# 初始化清理列
position_df['position_cleaned'] = position_df['position'].copy()

# 循环处理每个职位的错误拼写
for target, errors in position_mapping.items():
    pat = re.compile(r"\b(?:{})\b".format('|'.join(errors)), flags=re.IGNORECASE)
    position_df['position_cleaned'] = position_df['position_cleaned'].replace(pat, target, regex=True)

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

火山引擎 最新活动