Как прочитать сжатый csv-файл с пандами read_csv в Watson Studio? - PullRequest
0 голосов
/ 16 января 2019

Чтобы прочитать сжатый zip-файл csv-файла с пандами в моем локальном блокноте Jupyter, я выполняю:

import pandas as pd
pd.read_csv('csv_file.zip')

Однако в Watson Studio read_csv() выдает исключение, когда я заменяю имя файла потоковым объектом хранения облачного объекта.

Это первая ячейка моего ноутбука в Watson Studio:

import types
from ibm_botocore.client import Config
import ibm_boto3

def __iter__(self): return 0

client = ibm_boto3.client(service_name='s3', ibm_api_key_id='...',
    ibm_auth_endpoint="...", config=Config(signature_version='oauth'),
    endpoint_url='...')

body = client.get_object(Bucket='...', Key='csv_file.zip')['Body']
if not hasattr(body, "__iter__"):
    body.__iter__ = types.MethodType( __iter__, body )

Теперь, когда я пытаюсь:

import pandas as pd
df = pd.read_csv(body)

Я получаю:

'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte

Если я укажу compression='zip':

import pandas as pd
df = pd.read_csv(body, compression='zip')

сообщение:

'StreamingBody' object has no attribute 'seek'

Есть ли прямой путь к read_csv() заархивированному файлу в Watson Studio без явного написания кода для распаковки?

(pd.__version__ равно 0.21.0 в обеих средах.)

1 Ответ

0 голосов
/ 26 января 2019

Следующая процедура работает, если ваш файл уже добавлен в качестве ресурса данных вашего проекта Watson Studio.

  1. Создайте токен проекта для вашего проекта. В вашем проекте перейдите к Настройки , перейдите к разделу Токены доступа и выберите опцию Новый токен (достаточно выбрать «Просмотрщик» в Там выпадающее меню "Роль доступа для проекта").

  2. Теперь в вашей записной книжке в режиме «редактирования» есть три точки () в верхнем правом углу экрана, и вы нажимаете «вставить свой токен». Новая первая ячейка будет добавлена ​​с вашими учетными данными проекта, теперь вы запускаете ее.

  3. Теперь вы можете использовать такой код:

file = project.get_file("my_compressed_csv.zip")
df = pd.read_csv(file, compression='zip')

Параметр read_csv() не работает напрямую в этой ситуации в Watson Studio, поэтому вам необходимо использовать библиотеку project-lib.

...