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
相关产品推荐
相关产品推荐

