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

从DataFrame文本列移除匹配名称失败,求解决方案

问题分析与修复方案

核心问题:匹配逻辑完全错误

原代码里,对每个单词会遍历所有名称,只要有任意一个名称和单词不匹配,就把单词加入结果列表。这直接导致:

  • 就算单词是目标名称,只要存在其他名称和它不匹配,它还是会被多次添加到结果里
  • 最终文本里的名称根本没被移除,甚至单词数量会异常增多

修复步骤

1. 优化名称集合,提升查找效率

把名称集合保留为set(查找时间复杂度O(1),比列表的O(n)高效得多),同时统一转小写避免大小写匹配问题:

with open('names.txt', 'r') as f:
    NAMES = set(name.lower() for name in f.read().splitlines())

2. 修正单词过滤逻辑

对每个单词,只需检查它本身或所有格形式是否在名称集合中,无需遍历所有名称:

def remove_names(df, col, names_set):
    # 用apply批量处理,符合pandas操作规范,避免索引赋值异常
    def filter_word_list(word_list):
        filtered_words = []
        for word in word_list:
            word_lower = word.lower()
            # 排除名称本身和名称的所有格形式
            if word_lower not in names_set and f"{word_lower}'s" not in names_set:
                filtered_words.append(word)
        return filtered_words
    
    df[col] = df[col].apply(filter_word_list)
    return df[col]

3. 调用修正后的函数

df_norm['Full Text'] = remove_names(df_norm, 'Full Text', NAMES)

额外说明

原代码使用df[col][idx]的链式索引赋值,可能触发SettingWithCopyWarning,甚至导致赋值不生效,改用apply是更安全的pandas操作方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:35:19