在此处发布内容可以使处理熊猫上任何CPU密集型任务的性能降低的人受益:
我没有像问题中那样一次替换掉所有内容,而是制作了一个替换字典,用每个数据帧中的唯一值进行替换,这使它从永远花费(我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)
我使用了一个基于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倍。然后,我通过并行性立即利用了所有核心。为此,我经历了多种选择,例如多处理和线程处理,但是它们都没有提供与modin.pandas一样快的比较结果。它的变化很小(只需输入一行即可
modin.pands as pd
代替import pandas as pd
),并且运行优雅。它使以前的运行速度提高了约4倍。
这样一来,总的加速比达到了4800倍,整个过程瞬间就实现了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)