熊猫和并行计算和外部库

时间:2017-05-21 14:22:36

标签: python pandas parallel-processing

这是我的代码:

import pandas as pd
from nltk.corpus import wordnet

df = pd.DataFrame({'col_1': ['desk', 'apple', 'run']})
df['synset'] = df.col_1.apply(lambda x: wordnet.synsets(x))

上面的代码在4核心PC上以16 GB ram运行相当慢。我希望加速并在具有24核和120 GB内存的Google Cloud实例上运行它。并且仍然运行缓慢(可能是以前的两倍)。谷歌控制台显示只使用了4.1核心。

所以我很好奇:Pandas是否并行运行每一行的计算?如果确实如此,那么我猜这里nltk是一个瓶颈。任何人都可以确认或纠正我的猜测吗?

P.S。上面的代码只是一个示例,真正的数据帧有100k行。

1 个答案:

答案 0 :(得分:1)

pandas没有并行化申请。您应该定义一个在每一行而不是lambda函数上运行的自定义函数,然后使用multiprocessing来处理它并与您的数据帧重新同步。

def my_func(i):
    #some work with i as index
    return (i,result)
from multiprocessing import Pool
pool = Pool(24)
res=pool.imap(my_func,df.index)
for t in res:
    df.set_value(t[0],"New column",t[1])