将 Pandas dataframe.groupby 结果写入 S3 存储桶

Writing Pandas dataframe.groupby results to S3 bucket

我有一个大数据框,我正试图分成较小的部分并写入 S3 中的 csv 文件。出于测试目的,我将 groupby 大小设置得非常低,但概念是相同的。这是我的代码:

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'
        )

块工作正常,文件都按预期创建,但它们都是空的。不知道我错过了什么。我的理解是 g.to_csv(data) 应该将 csv 主体写入 BytesIO 对象,这就是我用来写入文件的内容。也许我误解了?

按照上面 Patryks 的建议,我找到了一段有效的代码。在 boto3 中使用 Resource 而不是客户端,然后从 BytesIO 缓冲区写入 put 的主体,我能够获取填充有值的文件。工作代码是:

if not submittingdata.empty:
    for i, g in submittingdata.groupby(df.index // 200):
        data = BytesIO()
        g.to_csv(data)
        s3_resource.Object(
            'some-magic-bucket',
            f'file_prep_{i}.csv'
        ).put(
            Body=data.getvalue()
        )