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

使用Python Pandas合并600个同结构CSV时间序列文件的问题

解决CSV合并时DateTime列异常的问题

嘿,我一眼就看出问题出在哪了——你用了pd.concat的axis=1参数,这是按列拼接(把三个表并排放在一起),三个文件的DateTime列会被同时保留,当你把它设为索引时,Pandas就把这三列的组合值当成了索引,所以才会出现('12/18/2017 10:00:00', ...)这种奇怪的元组值。

你需要的是按行拼接(把所有数据行堆叠在一起),这时候应该用axis=0(这也是pd.concat的默认值,甚至可以省略不写)。另外,建议读取CSV时就把DateTime解析为日期时间类型,这样后续排序和索引操作会更顺畅。

修正后的测试代码

import pandas as pd

# 读取文件时直接解析DateTime列为日期类型,避免后续排序出错
df1 = pd.read_csv(r"E:\Business\Economic Indicators\Consumer Price Index - Core (YoY) - European Monetary Union.csv", 
                  parse_dates=['DateTime'])
df2 = pd.read_csv(r"E:\Business\Economic Indicators\Private loans (YoY) - European Monetary Union.csv", 
                  parse_dates=['DateTime'])
df3 = pd.read_csv(r"E:\Business\Economic Indicators\Current Account s.a - European Monetary Union.csv", 
                  parse_dates=['DateTime'])

# 按行拼接所有数据(axis=0是默认值,可省略)
df = pd.concat([df1, df2, df3], axis=0, ignore_index=True)

# 处理可能的重复数据(如果不同文件有同一DateTime的记录,可按需调整规则)
df = df.drop_duplicates(subset=['DateTime'], keep='last')  # 保留最新的一条记录

# 设置DateTime为索引,并按时间倒序排列(最新时间在前)
df.set_index('DateTime', inplace=True)
df = df.sort_index(ascending=False)

print(df.head())
df.to_csv('merged_economic_test.csv')

批量处理600个CSV的高效代码

既然你有600个同结构的文件,手动逐个读取太浪费时间,用os模块遍历文件夹自动处理更高效:

import pandas as pd
import os

# 目标文件夹路径(用r前缀避免Windows路径的转义问题)
folder_path = r"E:\Business\Economic Indicators"

# 初始化空列表,用来存储所有读取的DataFrame
all_dfs = []

# 遍历文件夹下所有CSV文件
for filename in os.listdir(folder_path):
    if filename.endswith('.csv'):
        file_full_path = os.path.join(folder_path, filename)
        # 读取文件并解析DateTime列
        single_df = pd.read_csv(file_full_path, parse_dates=['DateTime'])
        all_dfs.append(single_df)

# 合并所有DataFrame
merged_total_df = pd.concat(all_dfs, axis=0, ignore_index=True)

# 去重+设置索引+倒序排序
merged_total_df = merged_total_df.drop_duplicates(subset=['DateTime'], keep='last')
merged_total_df.set_index('DateTime', inplace=True)
merged_total_df = merged_total_df.sort_index(ascending=False)

# 保存最终合并文件
merged_total_df.to_csv('merged_all_economic_indicators.csv')

额外小提示

  • 路径前加r是为了避免Windows系统里的反斜杠被解析成转义字符
  • drop_duplicates步骤可选:如果不同文件里有同一时间的重复记录,你可以根据需求调整keep参数——keep='first'保留最早的记录,keep='last'保留最晚的,False则删除所有重复项
  • 提前解析DateTime为日期类型,能避免字符串排序的bug(比如不会出现"1/1/2024"排在"12/1/2023"后面的错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:41:41