【问题标题】:Multiprocessing in pandas熊猫中的多处理
【发布时间】:2016-05-27 20:06:31
【问题描述】:

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

具体来说,我的 DataFrame 太大了,甚至在单个处理器上运行一次转换都需要几分钟时间。

我知道,我可以在 Spark 中执行此操作,但是已经编写了很多代码,所以我最好还是坚持现有的并获得并行功能。

【问题讨论】:

  • 看看Dask project
  • 你到底想做什么?多处理似乎适用于熊猫 - stackoverflow.com/questions/26187759/…
  • 嘿 Torrinos,答案似乎是特定于应用于 groupby 对象的。我在整个数据框的行上有一堆应用语句。我不想在单个处理器上运行整个数据帧,而是希望在多个处理器上并行化。
  • 嘿 Max,dask 看起来很有希望,但它与熊猫有什么联系吗?如果它是 pandas DataFrame 的孩子,那么我可以使用它。否则,它太危险了——它可能会炸毁我的大部分代码。

标签: python pandas dataframe parallel-processing multiprocessing


【解决方案1】:

稍微修改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 分组

绝对不优雅,但在我的用例中有效。

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2018-10-20
    • 2019-05-19
    相关资源
    最近更新 更多