我正在尝试将函数的执行并行化到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 ,但遇到了同样的问题。我不想重复处理,您知道会发生什么吗? 非常感谢