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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:32