我有一个文本文件,其中包含一些要从数据框中删除的字符串。数据框观察结果包含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...
如果看到此信息,这些文本将显示在所有行中,例如“这是什么新鲜的地狱?”或“加入电子邮件列表有助于加入Americablog Ac,“登录每日综述MS立法机关当选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
答案 0 :(得分:0)
您可以使用str.replace
例如:
df['text'] = df['text'].str.replace("|".join(words), " ")
答案 1 :(得分:0)
您可以通过以下方式修改代码:
for word in words:
df['text'] = df['text'].str.replace(word, ' ')
答案 2 :(得分:0)
您可以使用
df['text'] = df['text'].str.replace(r"\s*(?<!\w)(?:{})(?!\w)".format("|".join([re.escape(x) for x in words])), " ")
r"(?<!\w)(?:{})(?!\w)".format("|".join([re.escape(x) for x in words]))
行将执行以下步骤:
re.escape(x) for x in words]
-将安全地与正则表达式一起使用的单词中的所有特殊字符转义"|".join([...)
-将创建由正则表达式引擎匹配的替代项r"\s*(?<!\w)(?:{})(?!\w)".format(....)
-将创建一个像\s*(?<!\w)(?:word1|word2|wordn)(?!\w)
这样的正则表达式,将匹配单词作为列表中的整个单词(\s*
还将删除单词之前的0+空格)。