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

Pandas行文本去重时保留长度≤2的字符串与整数的方法咨询

问题解决方法

原有代码存在两个核心问题:

  • 未区分「无需参与去重的词」和「需要去重的词」,导致长度≤2的字符串、整数都被误判为重复而跳过
  • 使用子串匹配(in 直接匹配拼接后的整个字符串)而非单词级匹配,容易出现无关误判
修改后的实现代码
import re

def uniqueList(row):
    # 辅助函数:判断字符串是否为整数
    def is_integer(s):
        try:
            int(s)
            return True
        except ValueError:
            return False
    
    words = str(row).split(" ")
    result = []
    # 存储已出现的需要去重的词的小写形式,避免大小写导致的重复判定问题
    seen = set()
    
    for w in words:
        # 清洗掉词中的非字母数字字符,避免标点影响短词的长度判断
        clean_w = re.sub(r'[^a-zA-Z0-9]', '', w)
        # 符合以下任意条件的词,直接保留,不参与去重校验
        if len(clean_w) <= 2 or is_integer(w):
            result.append(w)
            continue
        # 剩余词需要校验重复,不区分大小写
        w_lower = w.lower()
        if w_lower not in seen:
            seen.add(w_lower)
            result.append(w)
    
    return " ".join(result)

df["Correction_Value"] = df["Correction_Value"].apply(uniqueList)
逻辑说明
  • 无需参与去重的两类词会直接加入结果:清洗掉标点后长度≤2的字符串、可转换为整数的字符串,即使重复也会完整保留
  • 其他词统一转小写后判断是否已经出现过,仅首次出现时加入结果,保证大小写不同的相同词会被去重
  • 用集合存储已出现的词,匹配效率更高,同时避免了原代码子串匹配的误判问题
  • 测试你提供的示例输入,运行后将得到完全符合预期的输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:05