首页 > 解决方案 > 如何将 csv 文件作为单独的数据帧从 python 中的 S3 存储桶加载?

问题描述

s3 = boto3.client('s3')

def get_s3_keys(bucket, prefix):

    """Get a list of keys in an S3 bucket."""
    resp = s3.list_objects_v2(Bucket=bucket, Prefix=prefix)
    for obj in resp['Contents']:
      files = obj['Key']
      print(files)
    return files


filename = get_s3_keys('bucket', 'folder')
print(filename)

我使用上面的函数来获取密钥,我看到了 3 个 csv 文件。我希望将它们导入单独的数据框。

标签: pythonamazon-web-servicesamazon-s3boto3

解决方案


我的 S3: 上有三个文件airtravel.csv, cities.csv, tally_cab.csv,取自这里

我用这个:

import boto3
import pandas as pd

my_bucket = "eine-spinne"
s3 = boto3.client("s3")
resp = s3.list_objects_v2(Bucket=my_bucket)

dfs = {}
for file in resp['Contents']:
    key = file['Key']
    if key.endswith(".csv"):
        object_data = s3.get_object(Bucket=my_bucket, Key=key)
        dfs[key] = pd.read_csv(object_data['Body'])

print(type(dfs['airtravel.csv']), "\n", dfs['airtravel.csv'].iloc[0])

这将创建dict三个数据帧中的一个,其中 S3 文件是键。

样本输出:

<class 'pandas.core.frame.DataFrame'> 
 Month      JAN
 "1958"    340
 "1959"    360
 "1960"    417
Name: 0, dtype: object

推荐阅读