将 pandas 数据帧作为压缩的 CSV 直接写入 Amazon s3 存储桶?

2023-11-26

我目前有一个脚本,可以读取保存到 s3 的现有 csv 版本,将其与 pandas 数据框中的新行组合起来,然后直接写回 s3。

    try:
        csv_prev_content = str(s3_resource.Object('bucket-name', ticker_csv_file_name).get()['Body'].read(), 'utf8')
    except:
        csv_prev_content = ''

    csv_output = csv_prev_content + curr_df.to_csv(path_or_buf=None, header=False)
    s3_resource.Object('bucket-name', ticker_csv_file_name).put(Body=csv_output)

有没有办法可以做到这一点,但使用 gzip 压缩的 csv?我想读取 s3 上现有的 .gz 压缩 csv(如果有),将其与数据帧的内容连接起来,然后直接在 s3 中用新的组合压缩 csv 覆盖 .gzwithout必须制作本地副本。


这是 Python 3.5.2 中使用 Pandas 0.20.1 的解决方案。

源 DataFrame 可以从 S3、本地 CSV 等读取。

import boto3
import gzip
import pandas as pd
from io import BytesIO, TextIOWrapper

df = pd.read_csv('s3://ramey/test.csv')
gz_buffer = BytesIO()

with gzip.GzipFile(mode='w', fileobj=gz_buffer) as gz_file:
    df.to_csv(TextIOWrapper(gz_file, 'utf8'), index=False)

s3_resource = boto3.resource('s3')
s3_object = s3_resource.Object('ramey', 'new-file.csv.gz')
s3_object.put(Body=gz_buffer.getvalue())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 pandas 数据帧作为压缩的 CSV 直接写入 Amazon s3 存储桶? 的相关文章