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

如何用Pandas合并城市多日期CSV为单DataFrame并自动生成日期列表

城市CSV文件合并与整月数据自动处理方案

问题背景

  • 现有纽约(NY)、芝加哥(Chicago)两个城市的CSV文件,每个城市对应3个CSV文件
  • 每个文件包含ID列和日期列(列名为YYYYMMDD格式)
  • 文件名格式为「城市名_ID_日期.csv」(示例:Chicago_ID_20101201.csv)
  • 需求:
    1. 为每个城市生成包含ID列及对应日期列的合并DataFrame,并保存为单一文件
    2. 处理整月数据时,避免手动指定日期列表

修正后的合并代码

原代码存在直接将读取的DataFrame赋值给列的错误,正确做法是以ID为键合并文件:

import pandas as pd

cities = ["NY", "Chicago"]
dates = ["20101201", "20101202", "20101203"]

for city in cities:
    # 读取第一个文件作为合并基础,仅保留ID和对应日期列
    first_file = f'{city}_ID_{dates[0]}.csv'
    merged_df = pd.read_csv(first_file)[['ID', dates[0]]]
    
    # 依次合并剩余日期的文件
    for date in dates[1:]:
        file_name = f'{city}_ID_{date}.csv'
        temp_df = pd.read_csv(file_name)[['ID', date]]
        # 按ID外连接,确保不丢失任何ID的数据
        merged_df = merged_df.merge(temp_df, on='ID', how='outer')
    
    # 保存合并后的文件
    merged_df.to_csv(f'{city}_merged_data.csv', index=False)
    print(f"{city}合并数据已保存至 {city}_merged_data.csv")

整月数据自动处理方法

方法1:从现有文件名提取日期

无需手动输入日期,直接从目录中的文件名解析出日期信息:

import pandas as pd
import os

cities = ["NY", "Chicago"]
csv_dir = "./your_csv_folder"  # 替换为你的CSV文件存放路径

for city in cities:
    # 筛选当前城市的所有CSV文件
    city_files = [
        f for f in os.listdir(csv_dir) 
        if f.startswith(f"{city}_ID_") and f.endswith(".csv")
    ]
    
    if not city_files:
        print(f"{city}未找到对应CSV文件")
        continue
    
    # 从文件名提取日期并去重排序
    dates = sorted({f.split("_")[-1].replace(".csv", "") for f in city_files})
    
    # 执行合并流程
    first_file_path = os.path.join(csv_dir, f'{city}_ID_{dates[0]}.csv')
    merged_df = pd.read_csv(first_file_path)[['ID', dates[0]]]
    
    for date in dates[1:]:
        file_path = os.path.join(csv_dir, f'{city}_ID_{date}.csv')
        temp_df = pd.read_csv(file_path)[['ID', date]]
        merged_df = merged_df.merge(temp_df, on='ID', how='outer')
    
    merged_df.to_csv(os.path.join(csv_dir, f'{city}_monthly_merged.csv'), index=False)
    print(f"{city}整月合并数据已保存")

方法2:生成整月日期序列(适用于需覆盖全月日期的场景)

如果需要处理整月所有日期(无论对应文件是否存在),可以用pandas.date_range生成日期序列:

# 生成2010年12月的所有日期,格式转为YYYYMMDD
date_range = pd.date_range(start='2010-12-01', end='2010-12-31')
dates = [date.strftime('%Y%m%d') for date in date_range]

# 后续合并逻辑同前,需注意处理文件不存在的情况(可添加try-except)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:41:22