多线程 – 加速多核机器上的Pandas

我有一个适合内存的熊猫数据框.我在数据框上执行serval贴图,但由于传递给map的回调函数的复杂性,每个贴图都很耗时.

我拥有一个AWS C4实例,它是8核和16GB-RAM.我在机器上运行
python脚本,发现超过80%的CPU时间是空闲的.所以,我认为(纠正我,如果我不对)python脚本是单线程的,只消耗1个核心.

有没有办法加速多核机器上的熊猫?

这是两张耗时地图的片段

 tfidf_features = df.apply(lambda r: compute_tfidf_features(r.q1_tfidf_bow, r.q2_tfidf_bow), axis=1)
 bin_features = df.apply(lambda r: compute_bin_features(r.q1_bin_bow, r.q2_bin_bow), axis=1)

这是compute_tfidf_features函数

def compute_tfidf_features(sparse1, sparse2):
    nparray1 = sparse1.toarray()[0]
    nparray2 = sparse2.toarray()[0]

    features = pd.Series({
    'bow_tfidf_sum1': np.sum(sparse1),
    'bow_tfidf_sum2': np.sum(sparse2),
    'bow_tfidf_mean1': np.mean(sparse1),
    'bow_tfidf_mean2': np.mean(sparse2),
    'bow_tfidf_cosine': cosine(nparray1, nparray2),
    'bow_tfidf_jaccard': real_jaccard(nparray1, nparray2),
    'bow_tfidf_sym_kl_divergence': sym_kl_div(nparray1, nparray2),
    'bow_tfidf_pearson': pearsonr(nparray1, nparray2)[0]
    })

    return features

我知道一个名为dask的python库,但它说它并不适用于可以舒适地适应内存的数据帧.

最佳答案 熊猫不支持这一点.
Dask阵列主要与Pandas API兼容,并支持应用程序的并行执行.

您可能还会考虑一些前沿解决方案,例如this new tool

点赞