【发布时间】:2020-03-14 05:55:11
【问题描述】:
我的问题受到previous SO 的启发,主题是:在 Amazon Web Services (AWS) S3 中将 DataFrames 上传并保存为 csv 文件。使用 Python3,我想使用s3.upload_fileobj - 多部分上传 - 使数据传输到 S3 更快。当我在接受的答案中运行代码时,我收到一条错误消息:"TypeError: a bytes-like object is required, not 'str'"..
这个答案最近被多次投票。所以我认为必须有一种方法可以在 Python3 中运行此代码而不会出错。
请在下面找到代码。为了方便起见,让我们使用一个简单的 DataFrame。实际上,这个 DataFrame 要大得多(大约 500 MB)。
import pandas as pd
import io
df = pd.DataFrame({'A':[1,2,3], 'B':[6,7,8]})
代码如下。为了方便起见,我将其转为函数:
def upload_file(dataframe, bucket, key):
"""dat=DataFrame, bucket=bucket name in AWS S3, key=key name in AWS S3"""
s3 = boto3.client('s3')
csv_buffer = io.BytesIO()
dataframe.to_csv(csv_buffer, compression='gzip')
s3.upload_fileobj(csv_buffer, bucket, key)
upload_file(df, your-bucket, your-key)
非常感谢您的建议!
【问题讨论】:
-
您的确切 python 版本?
-
您好像在使用 Python 2?
-
Python版本为3.7.1。
-
如果您仍然遇到错误,请确保您使用的 pandas 版本高于 1.2.0,其中包括 a fix for supporting bytes for file handles in to_csv()。