You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandarallel库parallel_apply时遇NameError错误求助

问题原因

pandarallel启动子进程执行并行任务时,子进程的命名空间不会自动包含主进程中定义的函数。你用lambda嵌套调用ponerfecha时,子进程只能拿到lambda代码,却找不到ponerfecha的定义,因此抛出NameError。而普通apply在主进程单线程执行,不存在命名空间隔离问题,所以能正常运行。

解决方案

直接将ponerfecha函数作为参数传给parallel_apply,无需用lambda包裹。同时建议把datetime的导入移到函数外部,避免每次调用都重复导入模块,提升执行效率。

修正后的完整代码:

import datetime
import pandas as pd
from pandarallel import pandarallel

# 初始化pandarallel(必须步骤,否则无法启用并行)
pandarallel.initialize(nb_workers=4)  # 可根据CPU核心数设置worker数量

def ponerfecha(row):
    return datetime.datetime(2023, 9, 10, row['HORA'], row['MINUTO'])

data = {'HORA': [10, 12, 15],
        'MINUTO': [30, 45, 0]}
CargaT = pd.DataFrame(data)

# 直接传递函数给parallel_apply,无需lambda
CargaT['FECHATRX'] = CargaT.parallel_apply(ponerfecha, axis=1)

print(CargaT)

运行后即可得到预期输出:

HORA  MINUTO            FECHATRX
0    10      30 2023-09-10 10:30:00
1    12      45 2023-09-10 12:45:00
2    15       0 2023-09-10 15:00:00
补充说明

如果需要给函数传递额外参数,可以使用functools.partial封装函数和固定参数,示例如下:

from functools import partial

def ponerfecha(row, year, month, day):
    return datetime.datetime(year, month, day, row['HORA'], row['MINUTO'])

# 封装固定日期参数
ponerfecha_with_date = partial(ponerfecha, year=2023, month=9, day=10)

# 并行调用封装后的函数
CargaT['FECHATRX'] = CargaT.parallel_apply(ponerfecha_with_date, axis=1)

内容的提问来源于stack exchange,提问作者FG85

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:52:42