Pandas 初学者:熊猫的词干生成字母而不是词干

Pandas 初学者:熊猫的词干生成字母而不是词干,pandas,Pandas,我的“tokens”列已经标记,是一个列表: ['super', 'tolles', 'team', 'nochmals', 'danke'] 我使用: from nltk.stem.snowball import SnowballStemmer german_stemmer = SnowballStemmer('german', ignore_stopwords=True) df_de['stemmed'] = df_de['tokens'].apply(lambda x: [german_

我的“tokens”列已经标记,是一个列表:

['super', 'tolles', 'team', 'nochmals', 'danke']
我使用:

from nltk.stem.snowball import SnowballStemmer
german_stemmer = SnowballStemmer('german', ignore_stopwords=True)
df_de['stemmed'] = df_de['tokens'].apply(lambda x: [german_stemmer.stem(y) for y in x])
我得到的是字母而不是单词,还有一个列表,列表中有两个起始方括号。解决这个问题的简单方法是什么

'stemmed'
[[, ', s, u, p, e, r, ', ,,  , ', t, o, l, l, ...

数据框
apply
已将函数应用于所选列中的每个单元格。因此,您要对每个单词进行应用,比如说
super
,然后对其进行迭代:

for y in x
就像

for y in 'super'
逐字逐句地重复一个单词。您需要将词干分析器应用于整个单元格:

df_de['tokens'].apply(lambda x: german_stemmer.stem(x))
或者更好

df_de['tokens'].apply(german_stemmer.stem)

输出为['super'、'tolles'、'team'、'nochmals'、'danke']。当我在一个单一的列表中正确地进行标记=['super','tolles','team','nochmals','danke']german_stemmer=snowballstemer('german',ignore_stopwords=True)stemmed=[german_stemmer.stem(x)for x in tokens]我得到了我期望得到的:['sup','toll','team','nochmal dank']@falco_tinnulus如上所述,你的问题是不完整的。写一个完整的,最少的代码,我们可以用来复制/我现在已经解决了这个问题。我从一个文件中读取列标记,它没有被解释为一个列表,而是一个字符串。我添加了df_de.tokens.apply(literal_eval),代码按原样工作,即df_de['stemmed']=df_de['tokens'].apply(lambda x:[德语_stemmer.stem(y)表示x中的y]),请标记为已解决