Pandas DataFrame方法是否可Pickle?并行处理场景下的验证疑问
你的测试结论并不真实可靠
你的测试逻辑完全偏离了目标:你pickle的是
df[0].apply(my_custom_function)的执行结果(一个普通的Pandas Series),而不是apply方法本身,也不是并行处理时需要传递的「待执行任务对象」。Series本身天生支持pickle,所以这个测试结果根本不能说明apply方法或自定义函数在并行场景下的可pick性。并行处理中真正需要验证的是:包含自定义函数和DataFrame切片的待执行任务能否被pickle——因为并行框架(比如multiprocessing)需要把任务打包传递给子进程。你的代码完全没测试这个核心场景。
正确的测试方向应该是:
- 验证自定义函数
my_custom_function本身是否可pickle - 验证绑定了函数和数据的可调用任务对象是否可pickle
比如可以用这段代码测试:
import pickle import pandas as pd def my_custom_function(col): return col + 1 df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]]) s = df[0] # 测试自定义函数的可pick性 try: pickle.dumps(my_custom_function) print("自定义函数可被pickle") except Exception as e: print(f"自定义函数无法pickle: {str(e)}") # 测试待执行的apply任务对象 def task(): return s.apply(my_custom_function) try: pickle.dumps(task) print("待执行的apply任务可被pickle") except Exception as e: print(f"待执行的apply任务无法pickle: {str(e)}")- 验证自定义函数
额外提醒:如果自定义函数是嵌套在其他函数内部的、或者包含不可pickle的依赖(比如某些类实例),即使顶级函数可pickle,嵌套函数也可能失败——这些场景你的原测试完全覆盖不到。
内容的提问来源于stack exchange,提问作者Kevin Li
相关产品推荐
相关产品推荐

