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

如何批量拉取指定GitHub仓库中的所有CSV文件并合并为单个CSV文件

一次性加载并合并目标仓库所有CSV文件的实现方案

核心思路:先获取目标目录下所有.csv格式的文件名称,遍历拼接raw资源地址加载为DataFrame,为每个表新增对应日期字段以区分数据所属日期,最后合并所有表得到全量数据集即可。

方法1:自动拉取目录下所有CSV(无需手动指定日期范围)

import pandas as pd
import requests

# 目标目录的GitHub API地址,用于获取文件列表
api_url = "https://api.github.com/repos/CSSEGISandData/COVID-19/contents/csse_covid_19_data/csse_covid_19_daily_reports"
raw_base_url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/"

# 请求文件列表
res = requests.get(api_url)
file_list = res.json()

df_list = []
for file in file_list:
    # 只处理csv后缀的文件
    if file["name"].endswith(".csv"):
        # 提取日期(文件名格式为MM-DD-YYYY.csv)
        date_str = file["name"].replace(".csv", "")
        # 拼接raw地址加载csv
        file_url = raw_base_url + file["name"]
        tmp_df = pd.read_csv(file_url)
        # 新增日期列,方便后续区分数据所属日期
        tmp_df["report_date"] = date_str
        df_list.append(tmp_df)

# 合并所有数据
total_df = pd.concat(df_list, ignore_index=True)

# 导出到本地csv,方便后续数据清洗使用
total_df.to_csv("covid_daily_total.csv", index=False, encoding="utf-8-sig")

# 查看合并后的数据
print(total_df.shape)
total_df.head()

方法2:按指定日期范围拉取(无需调用GitHub API)

如果你只需要某段时间的数据,可以直接构造对应日期的文件名,避免调用API的请求限制问题:

import pandas as pd
from datetime import datetime, timedelta

raw_base_url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/"
# 自定义起止日期,示例为2021年1月1日到2021年1月31日
start_date = datetime(2021,1,1)
end_date = datetime(2021,1,31)

df_list = []
current_date = start_date
while current_date <= end_date:
    # 构造MM-DD-YYYY格式的文件名
    date_str = current_date.strftime("%m-%d-%Y")
    file_url = raw_base_url + date_str + ".csv"
    try:
        tmp_df = pd.read_csv(file_url)
        tmp_df["report_date"] = date_str
        df_list.append(tmp_df)
    except:
        # 跳过不存在的日期文件
        print(f"{date_str} 无对应日报数据,已跳过")
    current_date += timedelta(days=1)

total_df = pd.concat(df_list, ignore_index=True)
total_df.to_csv("covid_daily_custom.csv", index=False, encoding="utf-8-sig")

注意事项

  • 不同时期的日报字段名存在差异(例:早期Country/Region后期改为Country_Region),pandas的concat方法会自动对齐列,缺失字段自动填充NaN,无需额外手动处理
  • 批量加载时如果出现网络报错,可以适当增加请求间隔,或者调整try-except逻辑重试失败的文件
  • 全量数据量较大,建议导出为本地文件后再做数据清洗,避免重复请求消耗网络资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:03