Pandas布尔索引筛选数据触发Lengths must match to compare错误如何解决
报错原因分析
- 核心问题出在
rand_cam_id = list(rand_row['cam_id'])这行代码:你将采样得到的单条cam_id值转为了长度为1的列表结构 - pandas中
Series和列表使用==做等值判断时,会按位置逐元素对比,要求左右两侧的长度完全一致。你代码中左侧df_speed_full['cam_id']是长度为229025的序列,右侧列表长度仅为1,不符合对比规则,因此抛出Lengths must match to compare错误。
修复方案
方案1:提取标量值做等值判断
直接取出采样得到的cam_id标量值,pandas会自动将标量广播到和左侧序列一致的长度做对比,不会触发长度校验错误:
rand_row = df_speed_full.sample(random_state=42) # 直接取单个标量值,不转为列表 rand_cam_id = rand_row['cam_id'].iloc[0] rand_cam_df = df_speed_full[df_speed_full['cam_id'] == rand_cam_id]
方案2:使用isin方法处理多值匹配场景
如果后续需要同时匹配多个cam_id,保持列表结构的情况下可以改用isin()方法做包含判断,该方法不需要左右两侧长度匹配:
rand_row = df_speed_full.sample(random_state=42) rand_cam_id = list(rand_row['cam_id']) # 用isin判断值是否在目标列表内 rand_cam_df = df_speed_full[df_speed_full['cam_id'].isin(rand_cam_id)]
内容的提问来源于stack exchange,提问作者Mariusz Wiesiolek
相关产品推荐
相关产品推荐

