【问题标题】:upload dataframes to s3 python [duplicate]将数据帧上传到 s3 python [重复]
【发布时间】:2020-12-11 12:49:20
【问题描述】:

我正在尝试如下划分数据框:

from io import StringIO
import pandas as pd

data = """
A,B,C
87jg,28,3012
h372,28,3011
kj87,27,3011
2yh8,54,3010
802h,53,3010
5d8b,52,3010
"""
df = pd.read_csv(StringIO(data), sep=',')

for key, group in df.groupby(['C','B']):
    group.to_csv(f'df_{key}.csv', index=False)

这会将按数据框分组的结果导出到本地机器。有没有办法执行此操作并将这些多个拆分 csv 上传到 s3(类似于 boto3 的 put_object)

【问题讨论】:

  • 那你期待什么?
  • 确保您已安装 f3fs 并调用 df.to_csv('s3://my_bucket/dummy.csv', index=False) pandas 将“理解”您要将 csv 写入 s3

标签: python amazon-web-services dataframe amazon-s3 boto3


【解决方案1】:

您也可以使用必须安装的s3fs。可以使用pip进行安装,例如:

pip install s3fs

已验证基于您的代码的示例:

import os

from io import StringIO
import pandas as pd
import s3fs

# I did not use my default aws profile
# so had to provide key and secret. If you use
# the default aws profile, providing `key`
# and `secret` should not be required
fs = s3fs.S3FileSystem(
        anon=False,
        key='<access_key>',
        secret='<secret_key>')

data = """ 
A,B,C
87jg,28,3012
h372,28,3011
kj87,27,3011
2yh8,54,3010
802h,53,3010
5d8b,52,3010
"""
df = pd.read_csv(StringIO(data), sep=',')

for key, group in df.groupby(['C','B']):
    group.to_csv(fs.open(f's3://<bucket-name>/df_{key[0]}-M{key[1]}.csv', 'w'), index=False)

代码正确上传文件:

【讨论】:

  • @omdurg 对不起,我不知道你是什么意思。如果需要,您可以使用所需的新格式更新您的问题。
  • @omdurg 我明白了。答案已更新。
【解决方案2】:
from io import StringIO
import pandas as pd
import boto3


data = """
A,B,C
87jg,28,3012
h372,28,3011
kj87,27,3011
2yh8,54,3010
802h,53,3010
5d8b,52,3010
"""
df = pd.read_csv(StringIO(data), sep=',')

client = boto3.client('s3')
for key, group in df.groupby(['C', 'B']):
    group.to_csv(f'df_{key}.csv', index=False)
    client.upload_file(f'df_{key}.csv', 'my-another-test-bucket-2',
                       f'df_{key[0]}-M{key[1]}.csv')

S3 存储桶

【讨论】:

  • @omdurg 是的,有可能。我已经用截图更新了答案。试试看。
  • [Errno 30] Read-only file system:?没听懂你的问题。我建议提出一个新问题(因为这被标记为重复)。还请让我们知道哪个答案适合您解决这个特定问题。您可以投票/接受提供的答案。对于Read-only 问题,请提出另一个问题,提供所有可能的详细信息。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2012-12-09
  • 2018-12-03
  • 1970-01-01
  • 2018-02-02
相关资源
最近更新 更多