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

合并3个Dask dataframe转pandas报'Unalignable boolean Series'错误

错误原因

你在loc筛选阶段使用了未合并的原始表(df_drivers、df_races)的列生成布尔索引序列,但筛选的目标对象是三个表join后的新Dask DataFrame,二者的行数量、索引规则完全不匹配,因此触发索引对齐报错。
另外Dask采用懒执行机制,构造运算链时只会做语法校验不会校验逻辑合理性,所以代码定义阶段不会报错,只有调用compute触发实际计算时才会抛出异常。

解决方案

merge操作已经将关联表的所有字段都带入到了合并后的结果中,你直接引用合并后对象自带的字段写筛选条件即可,不需要再访问原始表的列。
修正后的代码如下:

from dask import dataframe as df
import pandas as pd
pd.set_option("max_rows", None)

df_times = df.read_csv("lap_times.csv", blocksize=64000000)
df_races = df.read_csv("races.csv",blocksize=64000000)
df_drivers = df.read_csv("drivers.csv", blocksize=64000000)

# 先把合并后的结果赋值给中间变量,可读性更高
merged_df = df_times.merge(df_drivers, on = "driverId").merge(df_races, on = "raceId")\
        .drop(labels = ["dob", "nationality", "milliseconds", "url_x", "url_y", "time_y", "date"], 
                axis = 1)

# 筛选条件直接引用合并后df的列,不要用原始表的列
pd1 = merged_df.loc[(merged_df["forename"] == "Sebastian") 
                    & (merged_df["surname"] == "Vettel") 
                    & (merged_df["year"] == 2018) 
                    & (merged_df["round"] == 1), :]

# 再执行compute就不会报错了
res = pd1.compute()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:15:02