我正在尝试使用Python 3.x从给定的URL读取csv文件:

import pandas as pd
import requests

url = "https://github.com/cs109/2014_data/blob/master/countries.csv"
s = requests.get(url).content
c = pd.read_csv(s)
我有以下错误

我怎样才能解决这个问题?我正在使用Python 3.4

最佳答案

更新:从 Pandas 0.19.2您现在可以只是pass read_csv() the url directly,尽管如果需要身份验证会失败。

对于较旧的 Pandas 版本,或(如果您需要身份验证),或出于任何其他HTTP容错原因:
pandas.read_csv与类似文件的对象一起用作第一个参数。

  • 如果要从字符串读取csv,则可以使用 io.StringIO
  • 对于URL https://github.com/cs109/2014_data/blob/master/countries.csv,您将得到 html 响应,而不是 raw csv;您应该使用github页面中Raw链接给出的url来获取原始的csv响应,即https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv

  • 例子:
    import pandas as pd
    import io
    import requests
    url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv"
    s=requests.get(url).content
    c=pd.read_csv(io.StringIO(s.decode('utf-8')))
    
    笔记:
    在Python 2.x中,字符串缓冲区对象为 StringIO.StringIO

    10-07 19:33
    查看更多