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

时间:2019-01-16 09:30:13

标签: python pandas dataframe zipfile watson-studio

要在我的本地Jupyter笔记本中读取带有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。)

1 个答案:

答案 0 :(得分:4)

如果您的文件已被添加为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库。