将 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 日期格式