Python 我的系统在试图通过矢量化numpy数组将函数应用于pandas数据帧时崩溃

Python 我的系统在试图通过矢量化numpy数组将函数应用于pandas数据帧时崩溃,python,pandas,numpy,vectorization,Python,Pandas,Numpy,Vectorization,我创建了一个过程,在此过程中,我通过名称匹配pandas数据框中的记录。这些名称不一定通过格式、拼写或类似的方式进行标准化,因此这种匹配是通过模糊匹配方法完成的 从本质上讲,我试图获取每个记录的名称字段,并将其与所有其他相关记录进行匹配。经过一些研究,很明显,通过矢量化numpy阵列传递匹配函数将是更快的方法。然而,即使在100条记录上运行我的代码也会使我的系统崩溃。但是它在1上工作。我还没有足够的知识来了解内存约束,但我担心的是这个函数的内存需求正在过载 名称字段值是一个字符串。我正在尝试将匹

我创建了一个过程,在此过程中,我通过名称匹配pandas数据框中的记录。这些名称不一定通过格式、拼写或类似的方式进行标准化,因此这种匹配是通过模糊匹配方法完成的

从本质上讲,我试图获取每个记录的名称字段,并将其与所有其他相关记录进行匹配。经过一些研究,很明显,通过矢量化numpy阵列传递匹配函数将是更快的方法。然而,即使在100条记录上运行我的代码也会使我的系统崩溃。但是它在1上工作。我还没有足够的知识来了解内存约束,但我担心的是这个函数的内存需求正在过载

名称字段值是一个字符串。我正在尝试将匹配记录的列表写入新列。“match_name”调用是一个单独的函数,它使用名称元素的元组并为这些元素名称的组合创建语音代码。然后,它访问一个已经填充了每个记录语音代码组合的字典,并返回这些代码匹配的唯一ID。这个记录ID列表就是我试图写入新字段的内容

现在我正在测试几十万条记录

注意:最初的几行只是创建标准化名称元组。它们引用一些关键字词典来删除唯一字符并扩展缩写名称

def test(in_name):
    name=str(table["name_field"]).upper()
    for clean in NameCleaner:
        name=name.replace(clean ,'')            
    for expand in NamesExpander:
        name = name.replace(expand, NamesExpander[expand])
    name =  re.sub(r"\b[a-zA-Z]\b", "", name)
    name = (normalize_unicode_to_ascii(name)).strip()
    tp = tuple(name.split(" "))
    match_list = match_name(tp)
    
    return match_list

def main(df):
    df["Matches"] = [test(df["name_field"].values)]```

当它崩溃时,你收到错误消息了吗?没有,我的整个电脑都崩溃了,我必须重新启动。我想这是一个记忆问题或者类似的问题。目前,我正在使用I5处理器和8GB的RAM运行此函数。我遇到了一些建议,建议确保函数的每次迭代都删除以前的数据,以保持较低的内存需求。但我不确定如何确保这一点。耗尽所有系统内存不会使系统崩溃,操作系统将首先尝试将内存块移动到磁盘(在Linux下交换,在Windows下使用pagefile),直到达到某个限制,然后开始终止程序。硬盘崩溃通常是坏的硬件或驱动程序。如果您的计算机慢到爬行(没有崩溃,但可能无法使用),可能是因为您的磁盘速度慢,而操作系统正在交换,这会破坏性能(磁盘IO比内存慢数千倍)。如果是这种情况,禁用swap/pagefile可能会帮助程序更好地利用实际内存(有些操作会检查可用内存,但操作系统会告诉它还有更多,因为它提供了非常慢的磁盘空间),或者显示它确实在填满所有内存(内存不足错误)。