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

Python Pandas DataFrame移除停用词无效问题求助

解决Pandas DataFrame中德语停用词移除无效的问题

看起来你遇到的核心问题是数据类型不匹配——你的token_text列虽然看起来是列表格式,但实际上是字符串类型的"伪列表"(比如存储的是"['vibrierende', 'körperöffnungen', ...]"这样的字符串),而不是真正的Python列表对象。这就导致你的停用词移除函数在遍历的时候,是逐个遍历字符串的字符,而不是列表里的单词,自然不会匹配到任何停用词,最终输出和输入完全一致。

我帮你梳理一下修复步骤和修改后的代码:

步骤1:确认数据类型问题

先快速验证这一点,运行以下代码:

print(type(df['token_text'].iloc[0]))
# 如果输出是 <class 'str'>,那就是这个问题没错了

步骤2:将字符串格式的列表转换为真实列表

CSV文件无法直接存储Python列表,所以导出时会被转成字符串。我们可以用ast.literal_eval()来解析这个字符串,还原成真正的列表:

import ast

# 把字符串格式的列表转成Python列表
df['token_text'] = df['token_text'].apply(ast.literal_eval)

步骤3:修复停用词移除函数

原来的函数是拼接字符,现在要改成遍历列表中的单词,过滤停用词:

def remove_stopwords(txt_list):
    # 只保留不在停用词集合里的单词
    return [word for word in txt_list if word not in stop_words]

完整修改后的代码

import ast
import pandas as pd
from nltk.corpus import stopwords

# 读取数据
df = pd.read_csv('TAZ_tokens.csv', header=0, encoding='utf-8', dtype={'text': str})

# 加载德语停用词集合
stop_words = set(stopwords.words('german'))

# 修复数据类型:将字符串列表转为真实列表
df['token_text'] = df['token_text'].apply(ast.literal_eval)

# 定义正确的停用词移除函数
def remove_stopwords(txt_list):
    return [word for word in txt_list if word not in stop_words]

# 应用函数生成新列
df['token_text_nostop'] = df['token_text'].apply(remove_stopwords)

额外验证与注意事项

  • 运行后可以打印第一个样本验证效果:
    print("原分词结果:", df['token_text'].iloc[0])
    print("移除停用词后:", df['token_text_nostop'].iloc[0])
    
  • 如果你的字符串列表存在格式问题(比如混用单双引号、缺少逗号等),ast.literal_eval可能报错,这时候可以先做数据清洗,比如统一引号格式。
  • 确认你的德语停用词集合包含了带变音的停用词(比如'der'、'die'、'über'等),nltk的德语停用词默认是包含这些的,不过你也可以自定义补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:47:30