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

Pandas tweets_tokenize列停用词移除首函数失效次函数正常原因求解

两个停用词移除函数运行效果差异的原因

两个函数的核心差异在于第一个函数错误覆盖了入参,导致逻辑完全偏离预期:

  • pandas的apply()方法作用于Series时,会逐行将列中每个元素(这里是单条推文的分词结果列表)作为参数传入待调用函数的形参。
  • 第一个函数内部第一行执行了words = df['tweets_tokenize'],直接把传入的「单条推文的分词列表」参数,覆盖为了整个tweets_tokenize列的全部数据,进而引发三个问题:
    • 每次处理任意一行时,函数返回的都是整个列的全部分词结果,所以所有行的输出完全重复
    • 遍历的对象是列中每个元素(即每条推文的分词列表),而非分词列表中的单个词语,无法匹配停用词表,停用词移除逻辑完全不生效
    • 最终每行返回的结果是「多个分词列表组成的大列表」,所以会出现双层方括号的嵌套结构
  • 第二个函数没有覆盖传入的words参数,直接遍历当前行的单个分词列表中的每个词语做停用词匹配,逻辑完全正常。

相关代码说明

两个函数的差异点如下:

from nltk.corpus import stopwords
stopwords_indonesia = stopwords.words('indonesian')

# 存在问题的第一个函数
def stopwords_remover(words):
    words = df['tweets_tokenize'] # 该行是错误来源,覆盖了传入的参数
    tweets_stopwords = []
    for word in words:
        if word not in stopwords_indonesia:
            tweets_stopwords.append(word)
    return tweets_stopwords

# 逻辑正常的第二个函数
def stopwords_remover(words):
    tweets_stopwords = []
    for word in words:
        if word not in stopwords_indonesia:
            tweets_stopwords.append(word)
    return tweets_stopwords

df['tweets_tokenize'].apply(stopwords_remover)
df.head()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:06:00