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

Joblib并行处理使用非有序列表时触发IndexError的问题排查

问题分析与解决

核心问题

你的错误和列表有序性无关,直接原因是B_df[i]的索引方式错误:当i是22、23这类值时,你误将unit的取值当成了数据框的行位置/索引,而非筛选条件,导致触发IndexError。

具体解释

  • 对于A_df,a.unit.unique()的取值是0-15,刚好和数据框默认的行位置索引(从0开始)匹配,所以A_df[i]能正常取到对应行;
  • 对于B_df,b.unit.unique()包含22、23,但B_df的行位置索引大概率没有到22(比如数据总行数不足22),或者行标签索引不包含这些值,此时B_df[i]会被pandas解析为位置索引,自然会出现“列表索引越界”的错误。

修复代码

把直接用i索引数据框的写法,改成按unit列筛选对应行:

res_a = Parallel(n_jobs=-1, backend='loky', verbose=5)(
    delayed(Class_A.func)(A_df[A_df['unit'] == i]) for i in a.unit.unique().tolist()
) 
res_b = Parallel(n_jobs=-1, backend='loky', verbose=5)(
    delayed(Class_A.func)(B_df[B_df['unit'] == i]) for i in b.unit.unique().tolist()
) 
res_c = Parallel(n_jobs=-1, backend='loky', verbose=5)(
    delayed(Class_A.func)(C_df[C_df['unit'] == i]) for i in c.unit.unique().tolist()
)

额外建议

如果unit列是数据框的行索引,那可以保留B_df.loc[i](明确使用标签索引),而非直接B_df[i],避免pandas混淆位置索引和标签索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:35:18