如何根据最接近的匹配从另一个有效地替换大型数据框(100k +行)中的值?

如何根据最接近的匹配从另一个有效地替换大型数据框(100k +行)中的值?,第1张

如何根据最接近的匹配从另一个有效地替换大型数据框(100k +行)中的值? 因此,我采取了一些措施来提高速度,并使速度提高了近4800倍。

在此处发布内容可以使处理熊猫上任何CPU密集型任务的性能降低的人受益:

  1. 我没有像问题中那样一次替换掉所有内容,而是制作了一个替换字典,用每个数据帧中的唯一值进行替换,这使它从永远花费(我2小时后停止)到2分钟,因为有很多重复价值观。多数民众赞成在60倍加速:

    replacements = {string: closest_match(string, results2.products.unique())          if string not in results2.products.unique() else string  for string in results.products.unique()}

    results.replace({‘products’:replacements}, inplace = True)

  2. 我使用了一个基于C的实现,它利用了:editdistance库来计算levenshtein距离。在研究中,我发现许多这样的任务都具有基于C的实现,例如矩阵乘法和搜索算法等都可以轻松获得。此外,您始终可以使用C编写模块并在python中使用它。

    editdistance.eval('banana', 'bahama')
    1.71 µs ± 289 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    与我定义的函数
    levenshteinDistance('banana', 'bahama')
    进行了比较,后者
    34.4 µs ± 4.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    的速度提高了20倍。

  3. 然后,我通过并行性立即利用了所有核心。为此,我经历了多种选择,例如多处理和线程处理,但是它们都没有提供与modin.pandas一样快的比较结果。它的变化很小(只需输入一行即可

    modin.pands as pd
    代替
    import pandas as pd
    ),并且运行优雅。它使以前的运行速度提高了约4倍。

这样一来,总的加速比达到了4800倍,整个过程瞬间就实现了。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5675153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存