python - 将压缩的 Stata 文件从 URL 读取到 pandas 中

标签 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: Version of given Stata file is not 104, 105, 108, 111 (Stata 7SE), 113 (Stata 8/9), 114 (Stata 10/11), 115 (Stata 12), 117 (Stata 13), or 118 (Stata 14)

read_csv如果 zip 仅包含 csv,则支持通过 compression 参数读取压缩文件,该参数默认推断压缩。 read_stata 缺少此选项。

我可以通过下载并解压缩文件,然后阅读它来完成此操作,但这很困惑。

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

还有什么更好的办法吗?

最佳答案

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)

关于python - 将压缩的 Stata 文件从 URL 读取到 pandas 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59122596/

相关文章:

python - 如何使用python从多个json文件中提取信息

python - pandas 列的条件累积和

python - Django 查询单下划线表现得像双下划线?

python - 如何在 altair 中绘制一条跨越垂直连接图的线?

python - 如何按顺序将计数器写入文件?

python - 测试 pandas DataFrame 的任何列是否满足条件

python Pandas 数据框: fill nans with a conditional mean

python - 查找 Pandas 移动平均线当前和之前交叉点之间的最小值

python - 在 Pandas DF 中创建按年龄类别分组的新列

python - PySpark:在日期为字符串的范围内按日期字段过滤 DataFrame