我有一个舒适,适合在内存中的熊猫数据帧。我做的数据帧薮地图,但每个地图耗时由于传递给映射回叫功能的复杂性。我自己的AWS C4实例,这是8核心和16GB-RAM。我跑了机器上的python脚本,发现CPU时间超过80%处于闲置状态。所以,我认为(纠正我,如果我不是右)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阵列大多API与熊猫兼容并支持apply
并行执行。
你也可以考虑一些前沿的解决方案,如this new tool