将Pandas数据帧.groupby结果写入S3存储桶



我有一个大的数据帧,我正试图分解成更小的部分,并写入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(数据(应该将csv主体写入BytesIO对象,然后我用它来写入文件。也许我误解了?

根据Patryks的建议,我找到了一段有效的代码。在boto3中使用Resource而不是client,然后从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()
)

相关内容

最新更新