使用merge()合并不同行数CSV与XLSX文件时出现报错求助
解决多CSV与XLSX客流数据合并的行数不匹配问题
核心思路
每个CSV文件对应唯一一组经纬度(所有行的lat/lon值一致),XLSX包含所有经纬度的客流数据。我们需要将对应经纬度的客流数据,匹配到该CSV的每一行中,再合并所有处理后的CSV文件。
代码实现
import pandas as pd import os # 加载客流数据 df_flow = pd.read_excel("客流数据.xlsx") # 统一经纬度精度,避免浮点误差导致匹配失败 df_flow["LATITUDE"] = df_flow["LATITUDE"].round(4) df_flow["LONGITUDE"] = df_flow["LONGITUDE"].round(4) processed_dfs = [] # 遍历目录下所有CSV文件 for file in os.listdir("./"): if not file.endswith(".csv"): continue df_csv = pd.read_csv(file) # 统一CSV经纬度精度 df_csv["lat"] = df_csv["lat"].round(4) df_csv["lon"] = df_csv["lon"].round(4) # 获取当前CSV的唯一经纬度 target_lat = df_csv.iloc[0]["lat"] target_lon = df_csv.iloc[0]["lon"] # 匹配对应客流数据 matched_flow = df_flow[ (df_flow["LATITUDE"] == target_lat) & (df_flow["LONGITUDE"] == target_lon) ] # 校验匹配结果,避免多匹配或无匹配 if len(matched_flow) == 0: print(f"跳过文件{file}:未找到对应经纬度的客流数据") continue if len(matched_flow) > 1: print(f"跳过文件{file}:对应经纬度的客流数据存在重复行") continue # 将客流数据合并到当前CSV的每一行 merged_df = pd.merge( df_csv, matched_flow, left_on=["lat", "lon"], right_on=["LATITUDE", "LONGITUDE"], how="left" ) processed_dfs.append(merged_df) # 合并所有处理后的数据集 final_df = pd.concat(processed_dfs, ignore_index=True) # 保存结果 final_df.to_csv("合并后数据.csv", index=False)
为什么之前的循环会报错?
你之前的merge循环大概率是直接让XLSX和CSV按行索引或错误的关联方式合并,没有考虑到XLSX一行对应CSV多行的对应关系,导致行数不匹配。上面的代码通过先锁定CSV的唯一经纬度,再精准匹配客流数据,确保每一行CSV都能关联到正确的客流信息。
内容的提问来源于stack exchange,提问作者bigchungus81
相关产品推荐
相关产品推荐

