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

使用Python pandas按时间列合并多个时序CSV为Excel的解决方案

原代码问题说明

你写的代码存在几个核心逻辑错误,导致无法得到正确合并结果:

  • 循环读取文件时未正确关联当前遍历到的文件名,始终读取同一个固定文件
  • 存储时间、数值的列表为全局变量,每次循环都会累加历史文件的所有数据,无法生成单文件对应的独立DataFrame
  • 合并逻辑错误,每次执行merge都是将当前df和自身合并,未和已累积的合并结果做关联
  • df_combine初始化方式错误,pd.DataFrame是类对象引用而非空表实例
  • 同一个CSV重复读取两次,IO开销翻倍,处理数百个文件时效率极低
高效实现方案

不需要逐次调用merge,直接按索引横向拼接的方式性能更好,适配数百个文件的批量处理场景,代码如下:

import os
import pandas as pd

# 配置参数
csv_folder = "你的CSV文件所在文件夹路径"  # 替换成实际路径
output_excel_path = "合并后时序数据.xlsx"  # 输出的Excel文件路径
join_method = "outer"  # outer=保留所有文件出现的所有时间点,inner=仅保留所有文件共有的时间点

# 遍历读取所有CSV
df_list = []
for file in os.listdir(csv_folder):
    # 跳过非CSV文件
    if not file.lower().endswith(".csv"):
        continue
    file_path = os.path.join(csv_folder, file)
    # 单次读取整个CSV,不用分两次读列
    df = pd.read_csv(file_path)
    # 将time列设为索引,方便后续横向拼接,列名默认使用文件自带的第二列表头(即文件名)
    # 如果需要去掉列名里的.csv后缀,打开下面这行注释即可
    # df = df.rename(columns={df.columns[1]: os.path.splitext(file)[0]})
    df = df.set_index("time")
    df_list.append(df)

# 横向拼接所有表
df_combine = pd.concat(df_list, axis=1, join=join_method).reset_index()

# 导出到Excel
df_combine.to_excel(output_excel_path, index=False)
注意事项
  • 如果不同CSV里的time列格式不统一(比如部分是时间戳、部分是字符串),可以在读取后统一转换格式,比如df["time"] = df["time"].astype(str),避免相同时间点匹配失败
  • 如果存在重复时间点的行,建议读取后先做去重:df = df.drop_duplicates(subset="time", keep="last"),避免拼接时出现行膨胀
  • 数百个文件导出Excel时如果遇到行数/列数超限问题,可以换用.to_csv()导出csv格式,兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:27:22