【问题标题】:Python Pandas handling of 308 requestPython Pandas 处理 308 请求
【发布时间】:2020-08-08 10:09:27
【问题描述】:

在尝试将英格兰的 Covid_19 数据读入 pandas 时,我尝试使用 PHE https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv 提供的 URL,但是,此文件需要 http 308 重定向。我尝试了优雅的解决方案:

import pandas as pd
tabel = pd.read_csv('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv')

导致错误HTTPError: HTTP Error 308: Permanent Redirect

但是,URL 的作用是

import pandas as pd
import requests
import io
datastr = requests.get('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv',allow_redirects=True).text
data_file = io.StringIO(datastr)
table = pd.read_csv(data_file)

给出想要的结果。

我想要类似于第一个解决方案的东西,这是熊猫的问题还是我做错了什么?

【问题讨论】:

    标签: python pandas csv data-science


    【解决方案1】:

    查看 Pandas 源代码,它使用 urllib.request.urlopen() 并且文档建议它应该遵循有意义的重定向。

    但是,308 不是根据https://www.rfc-editor.org/rfc/rfc7231 定义的重定向代码,因此 urllib 会抛出异常,因为它不知道该怎么做。 requests 库更宽容一些。

    响应说“永久重定向”,但看看狡猾的托管,我怀疑这真的是什么意思。

    我认为出版商搞砸了,所以除了你的解决方法之外,我不会花太多时间。

    请注意,请求确实可以让您获得可以传递给 pd.read_csv() 的原始流:

    r = requests.get('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv', stream=True)
    pd.read_csv(r.raw)
    
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多