gpt4 book ai didi

python - 如何在不写入磁盘的情况下将 AWS S3 上的文本文件导入 pandas

转载 作者:IT老高 更新时间:2023-10-28 20:22:54 30 4
gpt4 key购买 nike

我在 S3 上保存了一个文本文件,这是一个制表符分隔的表格。我想将它加载到 Pandas 中,但不能先保存它,因为我在 Heroku 服务器上运行。这是我目前所拥有的。

import io
import boto3
import os
import pandas as pd

os.environ["AWS_ACCESS_KEY_ID"] = "xxxxxxxx"
os.environ["AWS_SECRET_ACCESS_KEY"] = "xxxxxxxx"

s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket="my_bucket",Key="filename.txt")
file = response["Body"]


pd.read_csv(file, header=14, delimiter="\t", low_memory=False)

错误是

OSError: Expected file path name or file-like object, got <class 'bytes'> type

如何将响应正文转换为 pandas 可以接受的格式?

pd.read_csv(io.StringIO(file), header=14, delimiter="\t", low_memory=False)

returns

TypeError: initial_value must be str or None, not StreamingBody

pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)

returns

TypeError: 'StreamingBody' does not support the buffer interface

更新 - 使用以下工作

file = response["Body"].read()

pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)

最佳答案

pandasboto 用于 read_csv,因此您应该能够:

import boto
data = pd.read_csv('s3://bucket....csv')

如果你需要boto3,因为你在python3.4+,你可以

import boto3
import io
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='bucket', Key='key')
df = pd.read_csv(io.BytesIO(obj['Body'].read()))

自从 version 0.20.1 pandas 使用 s3fs,见 answer below .

关于python - 如何在不写入磁盘的情况下将 AWS S3 上的文本文件导入 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37703634/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com