Tengo una función AWS Lambda que consulta la API y crea un marco de datos, quiero escribir este archivo en un depósito S3, estoy usando:
import pandas as pd import s3fs df.to_csv('s3.console.aws.amazon.com/s3/buckets/info/test.csv', index=False)Estoy recibiendo un error:
No existe tal archivo o directorio: 's3.console.aws.amazon.com/s3/buckets/info/test.csv'
Pero ese directorio existe, porque estoy leyendo archivos desde allí. ¿Cuál es el problema aquí?
He leído los archivos anteriores como este:
s3_client = boto3.client('s3') s3_client.download_file('info', 'secrets.json', '/tmp/secrets.json')¿Cómo puedo cargar todo el marco de datos en un depósito S3?
Puede usar el paquete boto3 también para almacenar datos en 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())Este
"s3.console.aws.amazon.com/s3/buckets/info/test.csv"
no es un URI de S3, debe pasar un URI de S3 para guardarlo en s3. Además, no necesita importar s3fs (solo necesita que esté instalado),
Sólo inténtalo:
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")NOTA: primero debe crear un depósito en aws s3.