Python multiprocessing进程池处理DataFrame时返回NoneType如何解决
问题结论与修复方案
该问题和multiprocessing运行机制完全无关,属于pandas接口使用错误。
pandas中drop方法传入inplace=True参数时,会直接在原DataFrame对象上执行修改操作,方法本身无返回值(即返回None)。代码中同时执行了赋值操作,将返回的None覆盖了原本的DataFrame变量,才会出现类型异常。
两种修复方式
- 保留
inplace=True,删除赋值操作:
print(type(all_node_data)) # 输出DataFrame类型 all_node_data.drop(all_node_data.columns[1], axis=1, inplace=True) print(type(all_node_data)) # 仍为DataFrame类型
- 去掉
inplace=True,接收drop返回的新DataFrame对象:
print(type(all_node_data)) # 输出DataFrame类型 all_node_data = all_node_data.drop(all_node_data.columns[1], axis=1) print(type(all_node_data)) # 仍为DataFrame类型
通用排查思路
遇到并行任务逻辑异常时,可先屏蔽多进程逻辑,用单进程执行单份测试数据验证功能。如果问题可复现,即可直接排除多进程相关影响,聚焦于业务代码本身的逻辑错误。
内容的提问来源于stack exchange,提问作者Leonidas Karagiannis
相关产品推荐
相关产品推荐

