熊猫多处理重复通话

时间:2020-08-17 10:40:18

标签: python pandas dataframe multiprocessing

我正在尝试将函数的执行并行化到pandas数据框。 我已经尝试过以下answer中的以下代码:

import numpy as np
import pandas as pd
from functools import partial

def parallelize_dataframe(df, func, n_cores=None):
    if not n_cores:
        n_cores = min(mp.cpu_count(), len(df))
    print(f"Number of cores to use {n_cores}")
    df_split = np.array_split(df, n_cores)
    print(f"LEN SPLIT {len(df_split)} FUNC {func} DF SPLIT {df_split}")
    pool = mp.Pool(n_cores)
    df = pd.concat(pool.map(func, df_split))
    pool.close()
    pool.join()
    return df


def run_on_subset(func, data_subset):
    return data_subset.apply(func, axis=1)


def parallelize_on_rows(data, func, num_of_processes=None):
    print(f"Parellization of function {func}, data len {len(data)}")
    return parallelize_dataframe(data, partial(run_on_subset, func), num_of_processes)

它给我打印副本的问题。您可以像这样测试它:

import pandas as pd
import random
def a(b):
    print(f"{random.random()} {b['a']} ")
    return b
df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
parallelize_on_rows(df, a)

代替打印3行,它有时输出6行,有时输出4行,其中一行包含所有3行...,将对每行的调用复制。 我也尝试过 pandarallel ,但遇到了同样的问题。我不想重复处理,您知道会发生什么吗? 非常感谢

0 个答案:

没有答案