Python中如何对pandas DataFrame列多核并行应用多个函数
解决方案
实现思路
- 这里用轻量的
joblib库实现多核并行计算,它对数值计算任务的并行封装非常友好,无需手动管理进程池 - 先对
col2的每个值一次性执行三个目标函数,再把结果批量合并回原DataFrame,减少进程通信开销 - 注意:小数据量下并行的进程调度开销会比串行计算更高,建议数据量超过10万行再用并行方案
你提供的代码里第三个函数名写成了
function,以下示例统一修正为function3避免语法报错
完整代码示例
import pandas as pd from joblib import Parallel, delayed from multiprocessing import cpu_count # 示例数据 df = pd.DataFrame( {'col1': ['LA','Boston','Phoenix','Toronto'], 'col2': [2,3,4,5]}, columns=['col1', 'col2'] ) # 三个目标函数 def function1(x): return x**2 def function2(x): return x**3 def function3(x): return x**4 # 并行执行,n_jobs=-1表示使用所有CPU核心 parallel_result = Parallel(n_jobs=-1)( delayed(lambda x: (function1(x), function2(x), function3(x)))(val) for val in df['col2'] ) # 把结果转成DataFrame合并到原数据 df[['col2_f1', 'col2_f2', 'col2_f3']] = pd.DataFrame(parallel_result, index=df.index) print(df)
运行结果
col1 col2 col2_f1 col2_f2 col2_f3 0 LA 2 4 8 16 1 Boston 3 9 27 81 2 Phoenix 4 16 64 256 3 Toronto 5 25 125 625
可选替代方案:用原生multiprocessing库实现
如果不想额外安装第三方库,也可以用Python自带的multiprocessing模块实现:
from multiprocessing import Pool, cpu_count # 把三个函数打包成单输入的任务函数 def apply_all_funcs(x): return function1(x), function2(x), function3(x) if __name__ == '__main__': # 初始化进程池,调用所有CPU核心 with Pool(cpu_count()) as pool: result = pool.map(apply_all_funcs, df['col2']) # 合并计算结果到原DataFrame df[['col2_f1', 'col2_f2', 'col2_f3']] = pd.DataFrame(result, index=df.index)
内容的提问来源于stack exchange,提问作者ivandd
相关产品推荐
相关产品推荐

