Python 从csv数据帧行中删除nltk停止字

Python 从csv数据帧行中删除nltk停止字,python,pandas,csv,nltk,corpus,Python,Pandas,Csv,Nltk,Corpus,我正在尝试从以下从.csv读取的数据帧中删除停止字。这基本上是一个长长的列表,上面列出了洗发水标签数据集中出现的bigrams和它们的频率 目标是在“word1”或“word2”列中出现stopword时删除整行 word1 word2 frequency 0 nicht in 3069 1

我正在尝试从以下从.csv读取的数据帧中删除停止字。这基本上是一个长长的列表,上面列出了洗发水标签数据集中出现的bigrams和它们的频率

目标是在“word1”或“word2”列中出现stopword时删除整行

                        word1                      word2  frequency
0                       nicht                         in       3069
1                        wenn                        sie       2729
2                         von                    kindern       2108
3                         die                      hände       2094
4                        darf                      nicht       2091
5                       hände                        von       2091
6                      citric                       acid       2088
7                     kindern                   gelangen       2082
8                         sie                      einen       2053
9                         mit                        den       2023
10                       eine                   reaktion       1976
然而,到目前为止,我甚至还没有成功地删除一行,当它与nltk中的德语stopword匹配时,仅基于列“word1”

我使用的代码基于前面回答的问题

我得到的错误是: AttributeError:“list”对象没有属性“split”

我完全理解,我不理解被调用的函数,这是我的错。我在一边做一门课程,一边试图了解熊猫和nltk,但这并没有真正起到任何作用:

一旦数据帧中没有停止字,目标就是将其写入一个新的CSV。但这是为了以后的阶段

编辑:更改标题以进行澄清

应用功能不会删除任何行。它只是将一个函数映射到系列df[word1]的每个元素上。此外,word1列中的条目似乎属于list类型,而不是string类型

但是,如果df是一个包含列word1和字符串的数据帧,只需执行此操作

df = df[~df["word1"].isin(stop)]
。。。然后从df中删除所有条目,其中word1位于stop中。这里~是否定运算符,所以它的意思是不。some_series.isinsome_iterable方法返回一个与某些_级数具有相同索引的级数,其中每个项都是布尔值,表示某些_级数中的相应项是否包含在某些_iterable中

通常,您可以使用

df[Series of booleans]
其中“系列”指熊猫系列。由于pandas系列使用比较运算符,您可以执行以下操作

df[df["frequency"] > 2060]
它返回仅包含频率值高于2060的行的数据帧

编辑:我不确定否决票是否来自您,但如果此处提供的代码不起作用,您应该显示.csv文件的几行,因为仅从您的代码我们无法知道您的数据帧的确切外观

干杯,
Silas

为此,您可以使用列表理解。在这里,创建了一个新的列temp。如果word1或word2中的任何一个处于停止状态,则temp的值为False。删除临时值为False的行。最后,删除临时列并写入新的csv文件。希望这有帮助

import pandas as pd
from nltk.corpus import stopwords

stop = stopwords.words('english')
df = pd.read_csv("myfile.csv", sep=";")


df["temp"] = [True  if row.word1 not in stop and row.word2 not in stop else False for index, row in df.iterrows()]
df = df[df.temp == True]
df.drop('temp', axis=1, inplace=True)

df.to_csv("myfile_out.csv", sep=';') 

我不能重现你的错误。请在问题中加入myfile.csv的前几行,问题已经解决了。但是如果你感兴趣的话;这里有一个指向前100行的虚拟CSV的链接:Downvote不是我的。我现在正在尝试:
import pandas as pd
from nltk.corpus import stopwords

stop = stopwords.words('english')
df = pd.read_csv("myfile.csv", sep=";")


df["temp"] = [True  if row.word1 not in stop and row.word2 not in stop else False for index, row in df.iterrows()]
df = df[df.temp == True]
df.drop('temp', axis=1, inplace=True)

df.to_csv("myfile_out.csv", sep=';')