Python 从csv数据帧行中删除nltk停止字
我正在尝试从以下从.csv读取的数据帧中删除停止字。这基本上是一个长长的列表,上面列出了洗发水标签数据集中出现的bigrams和它们的频率 目标是在“word1”或“word2”列中出现stopword时删除整行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
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=';')