python - 如何在 Python 中使用 Pandas 从 s3 存储桶中读取 csv 文件

标签 python amazon-web-services pandas amazon-s3

我正在尝试使用以下代码将位于 AWS S3 存储桶中的 CSV 文件作为 pandas 数据帧读取到内存中:

import pandas as pd
import boto

data = pd.read_csv('s3:/example_bucket.s3-website-ap-southeast-2.amazonaws.com/data_1.csv')

为了提供完整的访问权限,我在 S3 存储桶上设置了存储桶策略,如下所示:

{
"Version": "2012-10-17",
"Id": "statement1",
"Statement": [
    {
        "Sid": "statement1",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::example_bucket"
    }
]

不幸的是,我仍然在 python 中遇到以下错误:

boto.exception.S3ResponseError: S3ResponseError: 405 Method Not Allowed

想知道是否有人可以帮助解释如何在 AWS S3 中正确设置权限或正确配置 pandas 以导入文件。谢谢!

最佳答案

使用 Pandas 0.20.3

import boto3
import pandas as pd
import sys

if sys.version_info[0] < 3: 
    from StringIO import StringIO # Python 2.x
else:
    from io import StringIO # Python 3.x

client = boto3.client('s3')

bucket_name = 'my_bucket'

object_key = 'my_file.csv'
csv_obj = client.get_object(Bucket=bucket_name, Key=object_key)
body = csv_obj['Body']
csv_string = body.read().decode('utf-8')

df = pd.read_csv(StringIO(csv_string))

关于python - 如何在 Python 中使用 Pandas 从 s3 存储桶中读取 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30818341/

相关文章:

python - 从 Pandas DataFrame 快速填充大型 Numpy 矩阵

python - Pandas :将不等长列表的列拆分为多列

python - 按降序将两个排序列表合并为一个

python - 亚马逊 RDS,lambda postgres

c# - 异步调用 AWS RDS CreateDBSnapshotAsync "Set It And Forget It"

python - 'one-hot-encoded' 的 'feature Importance' 变量的显示名称

python - 使用 Google Sheets API 公开电子表格?

python - 属性错误 : 'module' object has no attribute 'xfeatures2d' ?

linux - AWS CLI : The config profile (example) could not be found

Python:使用 pandas 导入 csv。尝试绘制一列,但出现错误,提示 "no numerical data to plot"