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

如何将S3指定文件夹内多个CSV文件高效加载到Python Notebook并合并

效率优化实现方案

原代码的核心问题是在循环中反复执行pd.concat,每次拼接都会生成新的DataFrame并全量拷贝已有的历史数据,整体时间复杂度为O(n²),文件数量越大性能损耗越严重。

基础优化版(最通用)

将所有文件读取的结果先存入列表,最后仅执行一次拼接操作,时间复杂度降为O(n),性能提升非常显著:

import pandas as pd
import numpy as np

df_buffer = []
path_template = "s3://ap/data/tm/aac0202-2121-%d.csv"

for num in np.arange(41, 71):
    df_buffer.append(pd.read_csv(path_template % num))

# 单次拼接完成合并,ignore_index=True避免行索引重复
full_df = pd.concat(df_buffer, ignore_index=True)

进阶优化版(适合S3远程IO场景)

S3存储属于远程对象存储,读取的主要耗时在IO等待,可通过多线程并行读取进一步提速:

import pandas as pd
import numpy as np
from concurrent.futures import ThreadPoolExecutor

def read_single_csv(num):
    return pd.read_csv(f"s3://ap/data/tm/aac0202-2121-{num}.csv")

# 线程数可根据自身带宽情况调整,通常设置为4~12即可
with ThreadPoolExecutor(max_workers=8) as pool:
    df_buffer = list(pool.map(read_single_csv, np.arange(41, 71)))

full_df = pd.concat(df_buffer, ignore_index=True)

可选优化点

  • 读取时通过dtype参数指定各列数据类型,可降低内存占用、提升读取速度,示例:
    pd.read_csv(path, dtype={"用户ID": int, "交易金额": float, "备注": str})
    
  • 提前安装s3fs、fsspec的最新版本,pandas读取S3路径依赖这两个库,新版修复了很多IO性能问题。
  • 如果需要合并后直接写入其他存储,可在pd.concat后直接调用to_csv/to_parquet等方法,不需要额外缓存中间结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:54:03