使用多处理并行排序数据帧

2024-05-18 09:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大熊猫数据帧(>;10GB),我想将其划分为较小的DFs,然后使用multiprocessing对它们进行并行排序

我的代码的简化版本如下:

from multiprocessing import Process

import numpy as np
import pandas as pd


def sort_df(df):
    df.sort_values(by=["b"], inplace=True)
    print(df)


if __name__ == "__main__":
    df = pd.DataFrame(np.random.rand(20, 3), columns=['a', 'b', 'c'])
    gb = df.groupby(pd.cut(df["b"], 4))
    # copy() is to suppress SettingWithCopyWarning
    partitioned_dfs = [gb.get_group(g).copy() for g in gb.groups]

    procs = []
    for df in partitioned_dfs:
        proc = Process(target=sort_df, args=(df,))
        procs.append(proc)
        proc.start()

    for proc in procs:
        proc.join()

当我使用大DF作为输入时,我的代码似乎占用了太多内存

  1. partitioned_dfs占用的内存量与 输入DF
  2. 生成新进程时,因为子进程是作为 父进程的副本,它还具有输入DF和 partitioned_dfs在其地址空间中,尽管它负责 仅适用于整个DF的一个子集

我想知道如何减少代码的内存使用。多处理在这里是合适的选择吗


Tags: 内存代码inimportdffor进程proc