Я пытаюсь экспортировать фреймворк данных pandas в CSV-файл в ведре в моем облачном хранилище Google, но следующий код, очевидно, у меня не работает:
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 имеет размер удерживаемой памяти? Если да, вы можете, по-видимому, написать новый объект в GCS из строки из python. Если ваши данные слишком велики, вы можете записать их в локальный файл, а затем загрузить файл из API. Не путайте GCS с файловой системой.
Я специально пытался определить, как использовать StringIO и FileIO для экспорта файла в корзину хранилища gcloud. Ни одно из других предложенных здесь решений, которые я просматривал, не предлагало решения. Мне удалось использовать их для импорта csv из gcloud в фрейм данных, поэтому я предположил, что будет несложно сделать то же самое в другом направлении. Мне удалось заставить gcs работать, поэтому я опубликую ниже, как я это сделал, для всех, кому может быть интересно.






Импорт файла из gcloud в dataframe работает, когда я кодирую так:
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?
Вы можете сохранить файл csv на своей виртуальной машине, а затем использовать gsutil, чтобы сохранить его в своей корзине.
Питон:
my_df.to_csv("data.csv")
Оболочка:
gsutil data.csv gs://my_bucket/
Возможный дубликат Сохранить фрейм данных pandas как csv в ведро хранилища gcloud