从熊猫列中删除列表中的单词 - python 2.7

Posted

技术标签:

【中文标题】从熊猫列中删除列表中的单词 - python 2.7【英文标题】:removing words from a list from pandas column - python 2.7 【发布时间】:2018-12-28 18:35:17 【问题描述】:

我有一个文本文件,其中包含一些我想从数据框中删除的字符串。数据框观察包含 ext 文件中存在的那些文本。

这是文本文件 - https://drive.google.com/open?id=1GApPKvA82tx4CDtlOTqe99zKXS3AHiuD

这里是链接;数据=https://drive.google.com/open?id=1HJbWTUMfiBV54EEtgSXTcsQLzQT1rFgz

我正在使用以下代码 -

import nltk
from nltk.tokenize import word_tokenize 
file = open("D://Users/Shivam/Desktop/rahulB/fliter.txt")
result = file.read()
words = word_tokenize(result)

我加载了文本文件并将它们转换为单词/标记。

这是我的数据框。

text
0   What Fresh Hell Is This? January 31, 2018 ...A...
1   What Fresh Hell Is This? February 27, 2018 My ...
2   What Fresh Hell Is This? March 31, 2018 Trump ...
3   What Fresh Hell Is This? April 29, 2018 Michel...
4   Join Email List Contribute Join AMERICAblog Ac...

如果您看到这一点,这些文本会出现在所有行中,例如“这是什么新鲜的地狱?”或“Join Email List Contribute Join AMERICAblog Ac”、“Sign in Daily Roundup MS Legislature Elected O”等。

我用这个循环

for word in words:
    df['text'].replace(word, ' ')

我的错误。

error                                     Traceback (most recent call last)
<ipython-input-168-6e0b8109b76a> in <module>()
----> 1 df['text'] = df['text'].str.replace("|".join(words), " ")

D:\Users\Shivam\Anaconda2\lib\site-packages\pandas\core\strings.pyc in replace(self, pat, repl, n, case, flags)
   1577     def replace(self, pat, repl, n=-1, case=None, flags=0):
   1578         result = str_replace(self._data, pat, repl, n=n, case=case,
-> 1579                              flags=flags)
   1580         return self._wrap_result(result)
   1581 

D:\Users\Shivam\Anaconda2\lib\site-packages\pandas\core\strings.pyc in str_replace(arr, pat, repl, n, case, flags)
    422     if use_re:
    423         n = n if n >= 0 else 0
--> 424         regex = re.compile(pat, flags=flags)
    425         f = lambda x: regex.sub(repl=repl, string=x, count=n)
    426     else:

D:\Users\Shivam\Anaconda2\lib\re.pyc in compile(pattern, flags)
    192 def compile(pattern, flags=0):
    193     "Compile a regular expression pattern, returning a pattern object."
--> 194     return _compile(pattern, flags)
    195 
    196 def purge():

D:\Users\Shivam\Anaconda2\lib\re.pyc in _compile(*key)
    249         p = sre_compile.compile(pattern, flags)
    250     except error, v:
--> 251         raise error, v # invalid expression
    252     if not bypass_cache:
    253         if len(_cache) >= _MAXCACHE:

error: nothing to repeat

【问题讨论】:

在替换中可能应该是word 而不是words for word in words: df['text'].replace(word, ' ') @Joe 我改了,有没有一种划线解决方案, python 2.7 是我的版本 试试df['text'] = df['text'].str.replace("|".join([re.escape(x) for x in words]), " ") 【参考方案1】:

您可以使用str.replace

例如:

df['text'] = df['text'].str.replace("|".join(words), " ")

【讨论】:

请检查问题【参考方案2】:

你可以这样修改你的代码:

for word in words:
     df['text'] = df['text'].str.replace(word, ' ')

【讨论】:

它打印了单词,我也添加了我的数据,请检查。我被困在这里已经 4 个小时了 同一行,我附上了错误,你否决了我的问题 @WatchPrime 我不反对。我无法在 1 小时内在这台计算机上安装 nltk 我可以在我的电脑上继续 请帮助我的朋友,我已添加数据和过滤文本。我被困在这里 4 个小时了【参考方案3】:

你可以使用

df['text'] = df['text'].str.replace(r"\s*(?<!\w)(?:)(?!\w)".format("|".join([re.escape(x) for x in words])), " ")

r"(?&lt;!\w)(?:)(?!\w)".format("|".join([re.escape(x) for x in words])) 行将执行以下步骤:

re.escape(x) for x in words] - 将转义单词中的所有特殊字符以安全地与正则表达式一起使用 "|".join([...) - 将创建将由正则表达式引擎匹配的替换 r"\s*(?&lt;!\w)(?:)(?!\w)".format(....) - 将创建一个像 \s*(?&lt;!\w)(?:word1|word2|wordn)(?!\w) 这样的正则表达式,它将匹配列表中的整个单词(\s* 还将删除单词前的 0+ 个空格)。

【讨论】:

我从最后 10 分钟开始跑步。看起来它正在工作。

以上是关于从熊猫列中删除列表中的单词 - python 2.7的主要内容,如果未能解决你的问题,请参考以下文章

如何从熊猫数据框中的列中删除字符串值

如果存在于熊猫列表中,则删除列中的模式

从熊猫列中的列表创建多列[重复]

从列表列表中提取元素并将其分配为熊猫数据框列中的值

检查列表中的单词并在 pandas 数据框列中删除这些单词

如何从熊猫数据框中的时间戳列中删除时区