Pandas能否批量读取S3目录下的多个CSV文件?
Pandas读取S3目录下所有CSV的实现方式
Pandas本身没有提供直接读取S3目录下所有CSV文件的单一API,但可以通过结合文件系统工具来实现这个需求,以下是两种常用的方法:
方法1:使用s3fs配合glob模式
s3fs可以让Pandas像操作本地文件一样访问S3存储。先确保安装了s3fs:
pip install s3fs
然后通过glob匹配目录下所有CSV文件,再批量读取合并:
import pandas as pd import s3fs # 初始化S3文件系统 fs = s3fs.S3FileSystem() # 获取目录下所有CSV文件路径 csv_files = fs.glob('s3://your-bucket/your-directory/*.csv') # 逐个读取并合并DataFrame df = pd.concat([pd.read_csv(f's3://{file}') for file in csv_files], ignore_index=True)
方法2:使用boto3遍历文件后读取
如果需要更精细的文件筛选(比如排除特定文件),可以用boto3列出目录下的文件:
import pandas as pd import boto3 # 初始化S3客户端 s3 = boto3.client('s3') # 列出指定桶和目录下的所有对象 response = s3.list_objects_v2(Bucket='your-bucket', Prefix='your-directory/') csv_files = [obj['Key'] for obj in response['Contents'] if obj['Key'].endswith('.csv')] # 读取并合并 df_list = [] for file_key in csv_files: obj = s3.get_object(Bucket='your-bucket', Key=file_key) df_list.append(pd.read_csv(obj['Body'])) df = pd.concat(df_list, ignore_index=True)
注意事项
- 确保你的环境有访问该S3目录的权限(配置好AWS凭证,比如通过
~/.aws/credentials或环境变量) - 如果目录下有非CSV文件,要添加过滤逻辑避免报错
- 处理大文件时,建议分块读取或者使用
dask.dataframe来减少内存压力
内容的提问来源于stack exchange,提问作者nirkov
相关产品推荐
相关产品推荐

