代码之家  ›  专栏  ›  技术社区  ›  Alexander Pozdneev Andrew Shepherd

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

  •  0
  • Alexander Pozdneev Andrew Shepherd  · 技术社区  · 6 年前

    要在本地Jupyter笔记本中读取包含熊猫的压缩csv文件,请执行以下操作:

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

    然而,在华生工作室, read_csv() 将文件名替换为云对象存储流对象时引发异常。

    这是我在华生工作室的第一个笔记本手机:

    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 Cysv() 华生工作室的压缩文件,没有显式地写解包代码?

    (The pd.__version__ 0.21.0 在两种环境中。)

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alexander Pozdneev Andrew Shepherd    6 年前

    如果您的文件已添加为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 图书馆。