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

Ale*_*eev 0 python zip dataframe pandas watson-studio

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

import pandas as pd
pd.read_csv('csv_file.zip')
Run Code Online (Sandbox Code Playgroud)

但是,在 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 )
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试时:

import pandas as pd
df = pd.read_csv(body)
Run Code Online (Sandbox Code Playgroud)

我得到:

'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)

如果我指定compression='zip'

import pandas as pd
df = pd.read_csv(body, compression='zip')
Run Code Online (Sandbox Code Playgroud)

消息是:

'StreamingBody' object has no attribute 'seek'
Run Code Online (Sandbox Code Playgroud)

是否有直接方法可以read_csv()在 Watson Studio 中获取压缩文件,而无需显式编写解包代码?

(这在两种环境中pd.__version__都是如此0.21.0。)

Mat*_*lgo 5

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

\n\n
    \n
  1. 为您的项目创建项目代币。在您的项目中,转到Settings,导航到该Access tokens部分并单击选项New token(在“项目的访问角色”下拉菜单中选择“查看者”就足够了)。

  2. \n
  3. \xe2\x8b\xae现在,在处于“编辑”模式的笔记本中,屏幕右上角有三个点 ( ),您可以在此处单击插入令牌。将添加一个新的第一个单元格以及您的项目凭据,现在您可以运行它。

  4. \n
  5. 现在你可以使用这样的代码:

  6. \n
\n\n
file = project.get_file("my_compressed_csv.zip")\ndf = pd.read_csv(file, compression=\'zip\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n