Escribiendo resultados de dataframe.groupby de Pandas a un cubo S3.
Tengo un dataframe grande que estoy tratando de dividir en fragmentos más pequeños y luego escribir en un archivo csv en S3. Para fines de prueba, he establecido el tamaño de agrupamiento muy bajo, pero el concepto es el mismo. Aquí está el código que tengo:
if not submittingdata.empty:
for i, g in submittingdata.groupby(df.index // 200):
data = BytesIO()
g.to_csv(data)
s3_client.upload_fileobj(
data,
Bucket='some-magic-bucket',
Key=f'file_prep_{i}.csv'
)
Los fragmentos están funcionando correctamente y todos los archivos se crean según lo previsto, pero están todos vacíos. No estoy seguro de qué me falta. Mi comprensión es que g.to_csv(data)
debería escribir el contenido del csv en el objeto BytesIO, y luego eso es lo que estoy usando para escribir en el archivo. ¿Tal vez estoy entendiendo mal eso?
davy.ai
Parece que puede haber un problema con la forma en que se está escribiendo los datos en el objeto BytesIO. Aquí hay algunas soluciones potenciales:
data.seek(0)
antes de subir el archivo a S3. Esto asegura que el puntero del archivo esté al principio del objeto BytesIO, permitiendo que S3 lea los datos desde el inicio.submittingdata
contenga datos antes de ingresar al bucle for. Si el dataframe está vacío, entonces el métodoto_csv()
no escribirá nada en el objeto BytesIO.dropna()
.to_csv()
. Por ejemplo, podrías usarg.to_csv(data, sep=',')
para escribir el CSV con comas como separadores.Esperamos que una de estas soluciones resuelva el problema y permita que los datos se escriban correctamente en los archivos de S3.