python - 熊猫数据帧上的 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
写问题的建议/替代方案?先感谢您!。
解决方案
写入流时,函数的压缩参数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())
推荐阅读
- google-sheets - Google 表格的 QUERY 多张表格并返回唯一值
- swift - 删除子图层中的动画
- javascript - 如何使用 node.js 将 _bsontype objectID 值转换为 string/objectID 以插入 mongoDB
- android - 未使用 DiffUtil 调用 getItemCount 或 onBindViewHolder
- c# - 从 Visual Studio 启动 ASP.NET Core 不是从构建文件夹开始
- java - 如何根据活动配置文件访问 application-{profile}.properties 文件
- amazon-web-services - AWS AppSync DDoS protection. What are the alternatives?
- swift - UICollectionViewFlowLayout 中的 UICollectionViewCell 重复行
- python - 如何在 Django 上重命名上传的文件,然后再将其发送到亚马逊 s3 存储桶?
- python - 输出 CSV 文件而不下载它