首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将压缩后的Stata文件从URL读入熊猫

将压缩后的Stata文件从URL读入熊猫
EN

Stack Overflow用户
提问于 2019-12-01 04:47:10
回答 2查看 425关注 0票数 2

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

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

代码语言:javascript
复制
import pandas as pd
pd.read_stata('https://www.federalreserve.gov/econres/files/scfp2016s.zip')

ValueError:给定文件的版本不是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缺乏此选项。

我可以通过下载和解压缩文件,然后读取它,但这是混乱的。

代码语言:javascript
复制
!wget https://www.federalreserve.gov/econres/files/scfp2016s.zip
!unzip scfp2016s.zip
df = pd.read_stata('rscfp2016.dta')

有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-01 05:10:05

read_stata接受类似文件的对象,所以您可以这样做:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-12-01 05:11:28

您可以尝试使用请求:

代码语言:javascript
复制
import io
import zipfile
import requests

response = requests.get('https://www.federalreserve.gov/econres/files/scfp2016s.zip')                                                                                                                                             
a = zipfile.ZipFile(io.BytesIO(response.content))
b = a.read(a.namelist()[0]) 
pd.read_stata(io.BytesIO(b)) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59122596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档