要在我的本地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
。)
答案 0 :(得分:4)
如果您的文件已被添加为Watson Studio项目的数据资产,则以下过程适用。
为您的项目创建一个项目令牌。在您的项目中,转到设置,导航至访问令牌部分,然后单击选项新令牌(足以选择“查看器在“项目的访问角色”下拉菜单中。”
现在,在笔记本电脑的“编辑”模式下,屏幕右上角有三个点(⋮),然后单击插入令牌。现在,您将在第一个单元格中添加您的项目凭据。
现在您可以使用如下代码:
file = project.get_file("my_compressed_csv.zip")
df = pd.read_csv(file, compression='zip')
在这种情况下,read_csv()
选项在Watson Studio中不能直接使用,因此您需要使用project-lib
库。