如何在 Watson Studio 中使用 pandas read_csv 读取压缩的 csv 文件?

How to read a compressed csv-file with pandas read_csv in Watson Studio?

要在我的本地 Jupyter 笔记本中使用 pandas 读取 zip 压缩的 csv 文件,我执行:

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'

有没有直接在 Watson Studio 中 read_csv() 压缩文件而无需显式编写解包代码的方法?

pd.__version__ 在两种环境下都是 0.21.0。)

如果您的文件已添加为 Watson Studio 项目的数据资产,则以下过程有效。

  1. 为您的项目创建一个项目令牌。在您的项目中,转到 设置,导航到 访问令牌 部分并单击选项 新令牌(在 "Access role for project" 下拉菜单中 select "Viewer" 就足够了)。

  2. 现在你的笔记本在"edit"模式下,屏幕右上角出现三个点()您单击插入您的令牌。将使用您的项目凭据添加一个新的第一个单元格,现在您 运行 它。

  3. 现在您可以使用这样的代码:

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

在这种情况下,read_csv() 选项在 Watson Studio 中无法直接使用,因此您需要使用 project-lib 库。