应用正则表达式功能时,熊猫内存不足错误

时间:2018-08-04 14:43:13

标签: python regex pandas memory

我想应用正则表达式函数来清除数据框列中的文本。

即:

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:'更详细的信息。

有什么想法可以帮助调试吗?

1 个答案:

答案 0 :(得分:1)

replace链分成单独的replace操作。不仅使您的代码更具可读性和可维护性,而且中间结果将在使用后立即丢弃,而不是保留到所有修改完成之后:

replacements = ('#39;', "'"), ('amp;', '&'), ('#146;', "'"), ...
for replacement in replacements:
    x = x.replace(*replacement)

P.S。 'amp;'不应该是'&amp;'吗?