首页 > 解决方案 > 熊猫数据帧上的 s3fs gzip 压缩

问题描述

我正在尝试使用s3fs库和 pandas 在 S3 上将数据帧编写为 CSV 文件。尽管有文档,但恐怕 gzip 压缩参数不适用于 s3fs。

def DfTos3Csv (df,file):
    with fs.open(file,'wb') as f:
       df.to_csv(f, compression='gzip', index=False)

此代码将数据框保存为 S3 中的新对象,但保存为纯 CSV,而不是 gzip 格式。另一方面,使用此压缩参数的读取功能可以正常工作。

def s3CsvToDf(file):
   with fs.open(file) as f:
      df = pd.read_csv(f, compression='gzip')
  return df

写问题的建议/替代方案?先感谢您!。

标签: pythonamazon-s3python-s3fs

解决方案


写入流时,函数的压缩参数to_csv()不起作用。您必须分别进行压缩和上传。

import gzip
import boto3
from io import BytesIO, TextIOWrapper

buffer = BytesIO()

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

s3_resource = boto3.resource('s3')
s3_object = s3_resource.Object('bucket_name', 'key')
s3_object.put(Body=buffer.getvalue())

推荐阅读