Pandas DataFrame按列值过滤时遇长度不匹配错误求助
Pandas过滤DataFrame时长度不匹配ValueError的解决办法
错误原因
你遇到的ValueError: ('Lengths must match to compare', (5696,), (4,)),本质是用单一行提取出的4元素timeslot列表,直接和整个df的timeslot列(共5696行)做比较,两边元素数量不匹配,Pandas无法完成对齐判断。
解决方案
根据你的需求,分两种场景给出解决办法:
场景1:筛选df中timeslot属于df_hourly所有行date_parsed前4元素的记录
用向量化操作,效率最高:
# 提取df_hourly中所有需要匹配的目标timeslot列表 target_timeslots = df_hourly['date_parsed'].str[:4].tolist() # 用isin筛选df中符合条件的行 filtered_df = df[df['timeslot'].isin(target_timeslots)]
场景2:对df_hourly每一行单独筛选df中对应timeslot的记录(不推荐,仅当必须遍历时用)
matched_results = [] for _, row in df_hourly.iterrows(): # 获取当前行的目标timeslot current_slot = row['date_parsed'][:4] # 逐行匹配df中的对应记录(确保df['timeslot']是列表类型) matched = df[df['timeslot'].apply(lambda x: x == current_slot)] matched_results.append(matched) # 合并所有匹配结果 final_filtered_df = pd.concat(matched_results, ignore_index=True)
注意事项
- 确认
df['timeslot']和date_parsed[:4]的元素类型一致(都是列表),否则会出现匹配失败 - 优先使用场景1的向量化操作,
iterrows()遍历效率极低,大数据量下会严重拖慢运行速度
内容的提问来源于stack exchange,提问作者Kadircan Kara
相关产品推荐
相关产品推荐

