从URL读取压缩的Stata文件到熊猫

时间:2019-12-01 04:47:10

标签: python pandas dataframe

是否可以从URL读取仅包含.dta文件的.zip文件?

例如,https://www.federalreserve.gov/econres/files/scfp2016s.zip包含一个文件:rscfp2016.dta,但是pandas.read_stata不适用于该文件:

import pandas as pd
pd.read_stata('https://www.federalreserve.gov/econres/files/scfp2016s.zip')
  

ValueError:给定的Stata文件的版本不是104、105、108、111(Stata 7SE),113(Stata 8/9),114(Stata 10/11),115(Stata 12),117(Stata 13) )或118(Stata 14)

如果zip仅包含csv,则

read_csv支持通过compression参数(默认情况下推断压缩)读取压缩文件。 read_stata缺少此选项。

我可以通过下载并解压缩文件,然后读取它来做到这一点,但这很麻烦。

!wget https://www.federalreserve.gov/econres/files/scfp2016s.zip
!unzip scfp2016s.zip
df = pd.read_stata('rscfp2016.dta')

还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

read_stata接受类似文件的对象,因此您可以执行以下操作:

import pandas as pd
from io import BytesIO
from zipfile import ZipFile
from urllib.request import urlopen

url = 'https://www.federalreserve.gov/econres/files/scfp2016s.zip'
with urlopen(url) as request:
    data = BytesIO(request.read())

with ZipFile(data) as archive:
    with archive.open(archive.namelist()[0]) as stata:
        df = pd.read_stata(stata)

答案 1 :(得分:1)

您可以尝试以下请求:

glfw.make_context_current(window)