我想应用正则表达式函数来清除数据框列中的文本。
即:
re1 = re.compile(r' +')
def fixup(x):
x = x.replace('#39;', "'").replace('amp;', '&').replace('#146;', "'").replace(
'nbsp;', ' ').replace('#36;', '$').replace('\\n', "\n").replace('quot;', "'").replace(
'<br />', "\n").replace('\\"', '"').replace('<unk>','u_n').replace(' @.@ ','.').replace(
' @-@ ','-').replace('\\', ' \\ ')
return re1.sub(' ', html.unescape(x))
df['text'] = df['text'].apply(fixup).values.astype(str)
但是,当我运行此程序时,会出现“ MemoryError”(在jupyter笔记本中)。
我有128GB的RAM和创建数据帧的文件为4GB。
当抛出此错误时,我还从探查器中看到内存使用率小于20%。
在我应用fixup函数的那行,错误消息没有比'MemoryError:'更详细的信息。
有什么想法可以帮助调试吗?
答案 0 :(得分:1)
将replace
链分成单独的replace
操作。不仅使您的代码更具可读性和可维护性,而且中间结果将在使用后立即丢弃,而不是保留到所有修改完成之后:
replacements = ('#39;', "'"), ('amp;', '&'), ('#146;', "'"), ...
for replacement in replacements:
x = x.replace(*replacement)
P.S。 'amp;'
不应该是'&'
吗?