【问题标题】:Importing data from URL using Python (into pandas dataframe)?使用 Python 从 URL 导入数据(到 pandas 数据框)?
【发布时间】:2020-07-19 02:45:17
【问题描述】:

我在这个问题上转了一圈。有点令人沮丧,因为解决方案可能就在眼前。

无论如何,我找到了一个以 CSV 格式返回一些数据的 URL。但是,URL 本身不包含 csv 文件名。在网络浏览器中,我可以轻松访问链接,并询问我是否要打开或保存文件。所以,最终我知道我得到了一个带有名称的 csv 文件。我只是不确定如何在 python 中执行任务,因为似乎传递了一些中间数据类型(字节)

我尝试了以下方法无济于事:

import urllib
import io
import pandas as pd
link = r'http://www.cboe.com/products/vix-index-volatility/vix-options-and-futures/vix-index/vix-historical-data/'
f = urllib.request.urlopen(link)
myfile = f.read()
buf = io.BytesIO(myfile)  # originally tried io.StringIO(myfile) but then realized myfile is in bytes
df = pd.read_csv(buf)

有什么建议吗?

df 应包含类似于以下内容的数据:

1/5/2004,18.45,18.49,17.44,17.49 1/6/2004,17.66,17.67,16.19,16.73 1/7/2004,16.72,16.75,15.5,15.5 1/8/2004,15.42,15.68,15.32,15.61 1/9/2004,16.15,16.88,15.57,16.75 1/12/2004,17.32,17.46,16.79,16.82

这是错误信息的最后一行:

ParserError:标记数据时出错。 C 错误:预计第 24 行中有 2 个字段,看到 4

【问题讨论】:

  • 不是csv文件的urlhttp://www.cboe.com/publish/scheduledtask/mktdata/datahouse/vixcurrent.csv我在浏览器和终端中打开了你代码中的链接,它是一个标准网页。
  • @EricTruett 你是对的。检查网页时可以找到实际链接。

标签: python pandas url


【解决方案1】:

@Fred - 我认为您只是使用了错误的 URL。当我用http://www.cboe.com/publish/scheduledtask/mktdata/datahouse/vixcurrent.csv 替换链接时,您的脚本就可以工作了。

我在您的脚本最初指向的页面上找到了这个 URL。

【讨论】:

    【解决方案2】:

    这不是一个真正的答案,只是为了通知来自 CBOE 的链接此时无效(从 2020-DEC-07 到今天,2020-DEC-23),不确定该 url 是否会返回然而。 datahub.io 有类似的格式,但它不是最新的,来自 CHRIS 通过 Quandl 的免费数据也不是最新的。我还没有找到来自 CBOE 的官方通知,说明此 URL 将不再受支持。在 quantconnect 中发布了类似的问题/发现。

    https://www.quantconnect.com/forum/discussion/7673/problem-pulling-cboe-vix-data-on-live-trading/p1

    import pandas as pd
    url='http://www.cboe.com/publish/scheduledtask/mktdata/datahouse/vixcurrent.csv'
    df = pd.read_csv(url)
    print(df.shape)
    
    /usr/lib/python3.6/urllib/request.py in http_error_default(self, req, fp, code, msg, hdrs)
        648 class HTTPDefaultErrorHandler(BaseHandler):
        649     def http_error_default(self, req, fp, code, msg, hdrs):
    --> 650         raise HTTPError(req.full_url, code, msg, hdrs, fp)
        651 
        652 class HTTPRedirectHandler(BaseHandler):
    
    HTTPError: HTTP Error 404: NOT FOUND
    

    以上来自 CBOE 的网址似乎不再有效。

    过时数据可以从datahub.io & quandl获取:

    url = 'https://datahub.io/zelima1/finance-vix/r/vix-daily.csv'
    df = pd.read_csv(url)
    print(df.shape)
    print(df.Date)
    
    (3488, 5)
    (3488, 5)
    0       2004-01-02
    1       2004-01-05
    2       2004-01-06
    3       2004-01-07
    4       2004-01-08
               ...    
    3483    2017-11-01
    3484    2017-11-02
    3485    2017-11-03
    3486    2017-11-06
    3487    2017-11-07
    Name: Date, Length: 3488, dtype: object
    

    Quandl CHRIS VIX:

    https://www.quandl.com/data/CHRIS/CBOE_VX1-S-P-500-Volatility-Index-VIX-Futures-Continuous-Contract-1-VX1-Front-Month
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2021-11-22
    • 2021-12-22
    • 2013-06-02
    相关资源
    最近更新 更多