【问题标题】:Removing stop words from a pandas column从熊猫列中删除停用词
【发布时间】:2021-01-26 14:04:14
【问题描述】:
import nltk
nltk.download('punkt')
nltk.download('stopwords')
import datetime
import numpy as np
import re
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.stem.porter import PorterStemmer
# Load the Pandas libraries with alias 'pd' 
import pandas as pd 
# Read data from file 'filename.csv' 
# (in the same directory that your python process is based)
# Control delimiters, rows, column names with read_csv (see later) 
data = pd.read_csv("march20_21.csv") 
# Preview the first 5 lines of the loaded data 
#drop NA rows
data.dropna()
#drop all columns not needed
droppeddata = data.drop(columns=['created_at'])
#drop NA rows
alldata = droppeddata.dropna()

ukdata = alldata[alldata.place.str.contains('England')]
ukdata.drop(columns=['place'])

ukdata['text'].apply(word_tokenize)
eng_stopwords = stopwords.words('english') 

我知道有很多冗余变量,但我仍在努力让它工作,然后再回去完善它。

我不确定如何从标记列中删除存储在变量中的停用词。任何帮助表示赞赏,我是 Python 的新手!谢谢。

【问题讨论】:

  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA license 下授予 SE 分发内容的不可撤销的权利(无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何此类破坏性编辑都将被还原。请参阅How does deleting work?,详细了解如何在本网站上删除内容。

标签: python pandas dataframe tokenize


【解决方案1】:
  1. 将函数应用于列后,您需要将结果分配回列,这不是就地操作。

  2. 在标记化后ukdata['text'] 包含一个list 的单词,因此您可以在应用中使用list comprehension 来删除停用词。


ukdata['text'] = ukdata['text'].apply(word_tokenize)
eng_stopwords = stopwords.words('english') 
ukdata['text'] = ukdata['text'].apply(lambda words: [word for word in words if word not in eng_stopwords])

最小的例子:
import pandas as pd
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

eng_stopwords = stopwords.words('english') 
ukdata = pd.DataFrame({'text': ["This is a sentence."]})

ukdata['text'] = ukdata['text'].apply(word_tokenize)
ukdata['text'] = ukdata['text'].apply(lambda words: [word for word in words if word not in eng_stopwords])

【讨论】:

  • 试图在 DataFrame 的切片副本上设置一个值。尝试改用 .loc[row_indexer,col_indexer] = value 查看文档中的警告:pandas.pydata.org/pandas-docs/stable/user_guide/… """启动 IPython 内核的入口点。添加代码时出现此错误,我不确定是什么出错了吗?
  • hm,这很奇怪,因为我在您的代码中没有看到任何切片。如果您在两个作业中都将ukdata['text'] = ... 更改为ukdata.loc[:,'text'] = ... 会怎样?
  • 顺便说一句,在所有放置操作中,您必须将结果分配回数据框或使用 inplace=True
  • 嗨,Stef,我已经尝试过这个更改,但不幸的是我得到了同样的错误。
  • 很奇怪,我添加到答案中的示例对您有用吗?你的熊猫版本是什么(pd.__version__)?
猜你喜欢
  • 2021-02-17
  • 2021-08-13
  • 2019-11-13
  • 2019-05-18
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2013-12-12
相关资源
最近更新 更多