【问题标题】:How to export dataframe to csv in bucket on google cloud如何将数据帧导出到谷歌云存储桶中的 csv
【发布时间】:2019-03-26 20:23:46
【问题描述】:

我正在尝试将 pandas 数据帧导出到我的谷歌云存储存储桶中的 csv 文件,但以下代码显然不适合我:

my_df.to_csv(StringIO(file_io.FileIO('gs://mybucket/data/file.csv', mode='w+')))

这应该如何重写?我收到以下错误:

unbound method write() must be called within FileIO instance as first argument (got nothing instead)

如果答案很明显,我很抱歉,但我才刚刚开始学习 python。

【问题讨论】:

  • 您的 CSV 是否具有可存储的内存大小?如果是,您显然可以从 python 的字符串向 GCS 写入一个新对象。如果您的数据太大,您可以将其写入本地文件,然后从 API 上传文件。不要将 GCS 与文件系统混淆。
  • 我专门尝试确定如何使用 StringIO 和 FileIO 将文件导出到 gcloud 存储桶。我仔细阅读的这里提供的其他解决方案都没有提供解决方案。我成功地使用这些将 gcloud 上的 csv 导入数据帧,所以我认为在另一个方向上做同样的事情不会太复杂。我确实设法让 gcs 工作,所以我将在下面发布我是如何做到的,以供其他可能想知道的人使用。

标签: python file-io google-cloud-platform export-to-csv stringio


【解决方案1】:

当我这样编码时,将文件从 gcloud 导入数据框是可行的:

from tensorflow.python.lib.io import file_io
from pandas.compat import StringIO
import pandas as pd

def read_data(gcs_path):
   file_stream = file_io.FileIO(gcs_path, mode='r')
   data = pd.read_csv(StringIO(file_stream.read()), names=['various', 'column', 'names'])
   return data

my_df = read_data('gs://mybucket/data/file.csv')

但我无法扭转这个过程。

但是,GCS 对我有用:

import google.cloud.storage as gcs

client = gcs.Client()
bucket = client.bucket('my-bucket')
blobs = list(bucket.list_blobs(prefix='data/'))

my_df.to_csv('tmp.csv')
local_tmp_path = ('tmp.csv')
target_blob = bucket.blob('data/file.csv')
target_blob.upload_from_file(open(local_tmp_path, 'r'))

【讨论】:

  • 你用什么blobs
【解决方案2】:

您可以将 csv 文件保存在 VM 中,然后使用 gsutil 将其保存在您的存储桶中。

Python:

my_df.to_csv("data.csv")

壳牌:

gsutil data.csv gs://my_bucket/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2014-01-07
    • 2023-02-08
    相关资源
    最近更新 更多