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

Python 从zip文件中的csv创建数据帧,python,pandas,unzip,zipfile,Python,Pandas,Unzip,Zipfile,我正在尝试读取熊猫数据框中的WGIData.csv文件。WGIData.csv存在于我从该url下载的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):

我正在尝试读取熊猫数据框中的WGIData.csv文件。WGIData.csv存在于我从该url下载的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)
urlopen()
不返回可以发送到
ZipFile()
的对象(
HTTPResponse
)。您可以
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   
...

您的zip有两个文件:
['WGIData.csv','WGISeries.csv']
这可能是问题所在。这是一个不错的zip文件,我使用winrar@Achampion提取了它。那么我需要做什么呢?@coldspeedi只想阅读WGIData.csv这样的内容可能会有帮助:有没有不指定文件名的方法呢?您可以
extractall()
提取zip文件的所有内容,或者您可以获取
名称列表()
并遍历名称。