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

Posted

技术标签:

【中文标题】将 Pandas dataframe.groupby 结果写入 S3 存储桶【英文标题】:Writing Pandas dataframe.groupby results to S3 bucket 【发布时间】:2022-01-23 05:49:21 【问题描述】:

我有一个大数据框,我正试图将其分解为较小的部分并写入 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 对象,这就是我用来写入文件的内容。是不是我理解错了?

【问题讨论】:

这有帮助吗? link 【参考方案1】:

按照上面的 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()
        )

【讨论】:

以上是关于将 Pandas dataframe.groupby 结果写入 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

python:pandas - 如何将前两行 pandas 数据帧组合到数据帧头?

使用 pandas_udf 将 Spark Structured DataFrame 转换为 Pandas

Pandas:如何将 cProfile 输出存储在 pandas DataFrame 中?

如何防止 pandas 将原始数据库日期格式转换为 pandas 日期格式

Rpy2 和 Pandas:将预测的输出连接到 pandas 数据帧

如何将 mysqldump 导入 Pandas