代码之家  ›  专栏  ›  技术社区  ›  Vikas Gautam

从zip文件中的csv创建数据帧

  •  1
  • Vikas Gautam  · 技术社区  · 6 年前

    我正在读取熊猫数据框中的wgidata.csv文件。wgidata.csv存在于一个zip文件中,我正从该URL下载该文件。

    http://databank.worldbank.org/data/download/WGI_csv.zip

    但当我试图阅读时,它会抛出错误 badzipfile:文件不是zip文件

    这是我的python代码

    import pandas as pd
    from urllib.request import urlopen
    from zipfile import ZipFile
    
    class Get_Data():
    
        def Return_csv_from_zip(self, url):
            self.zip = urlopen(url)
            self.myzip = ZipFile(self.zip)
            self.myzip = self.zip.extractall(self.myzip)
            self.file = pd.read_csv(self.myzip)
            self.zip.close()
    
            return self.file
    
    url = 'http://databank.worldbank.org/data/download/WGI_csv.zip'
    data = Get_Data()
    df = data.Return_csv_from_zip(url)
    
    1 回复  |  直到 6 年前
        1
  •  6
  •   AChampion    6 年前

    urlopen() 不返回对象( HTTPResponse )您可以发送到 ZipFile() . 你可以 read() 响应和使用 io.BytesIO() 做你需要的:

    In []:
    from io import BytesIO
    
    z = urlopen('http://databank.worldbank.org/data/download/WGI_csv.zip')
    myzip = ZipFile(BytesIO(z.read())).extract('WGIData.csv')
    pd.read_csv(myzip)
    
    Out[]:
         Country Name Country Code                                     Indicator Name    Indicator Code       1996  \
    0        Anguilla          AIA                    Control of Corruption: Estimate            CC.EST        NaN   
    1        Anguilla          AIA           Control of Corruption: Number of Sources         CC.NO.SRC        NaN   
    2        Anguilla          AIA             Control of Corruption: Percentile Rank        CC.PER.RNK        NaN   
    3        Anguilla          AIA  Control of Corruption: Percentile Rank, Lower ...  CC.PER.RNK.LOWER        NaN   
    4        Anguilla          AIA  Control of Corruption: Percentile Rank, Upper ...  CC.PER.RNK.UPPER        NaN   
    5        Anguilla          AIA              Control of Corruption: Standard Error        CC.STD.ERR        NaN   
    ...