我有一个查询API并创建数据帧的AWS Lambda函数,我想将此文件写入S3存储桶,我正在使用:
import pandas as pd
import s3fs
df.to_csv('s3.console.aws.amazon.com/s3/buckets/info/test.csv', index=False)
我遇到错误:
没有这样的文件或目录:'s3.console.aws.amazon.com/s3/buckets/info/test.csv'
但是该目录存在,因为我正在从那里读取文件。这是什么问题?
我已经阅读过以前的文件,
s3_client = boto3.client('s3')
s3_client.download_file('info', 'secrets.json', '/tmp/secrets.json')
如何将整个数据帧上传到S3存储桶?
答案 0 :(得分:11)
此
“ s3.console.aws.amazon.com/s3/buckets/info/test.csv”
不是S3 URI,您需要传递一个S3 URI才能保存到s3。而且,您不需要导入s3fs(只需要安装它),
只需尝试:
import pandas as pd
df = pd.DataFrame()
# df.to_csv("s3://<bucket_name>/<obj_key>")
# In your case
df.to_csv("s3://info/test.csv")
注意:您需要首先在AWS s3上创建存储桶。
答案 1 :(得分:7)
您还可以使用boto3包将数据存储到到S3 :
from io import StringIO # python3 (or BytesIO for python2)
import boto3
bucket = 'info' # already created on S3
csv_buffer = StringIO()
df.to_csv(csv_buffer)
s3_resource = boto3.resource('s3')
s3_resource.Object(bucket, 'df.csv').put(Body=csv_buffer.getvalue())