Создать Dataframe из CSV внутри ZIP-файла - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь прочитать файл WGIData.csv в кадре данных pandas.WGIData.csv присутствует внутри zip-файла, который я загружаю с этого URL

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

Но когда я пытался прочитать, выдает ошибку BadZipFile: файл не являетсяпочтовый файл

Вот мой код 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 Ответ

0 голосов
/ 28 мая 2018

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   
...
...