熊猫中的多处理

时间:2016-05-27 20:06:31

标签: python pandas dataframe parallel-processing multiprocessing

是否可以对pandas数据帧进行分区以进行多处理?

具体来说,我的DataFrames太大了,只需几分钟即可在单个处理器上运行一次转换。

我知道,我可以在Spark中做到这一点但是已经编写了很多代码,所以我最好还是坚持使用我拥有的并获得并行功能。

1 个答案:

答案 0 :(得分:3)

略微修改https://stackoverflow.com/a/29281494/5351271我可以获得解决方案来处理行。

from multiprocessing import Pool, cpu_count

def applyParallel(dfGrouped, func):
    with Pool(cpu_count()) as p:
        ret_list = p.map(func, [group for name, group in dfGrouped])
    return pandas.concat(ret_list)

def apply_row_foo(input_df):
    return input_df.apply((row_foo), axis=1)

n_chunks = 10

grouped = df.groupby(df.index // n_chunks)
applyParallel(grouped, apply_row_foo)

如果索引不仅仅是一个行号,只需按np.arange(len(df))// n_chunks

分组

决定不优雅,但在我的用例中工作。