来自url的Pandas read_csv

时间:2015-09-04 14:44:25

标签: python csv pandas request

我正在使用Python 3.4和IPython,并具有以下代码。我无法从给定的URL读取csv文件:

    GameToken mSquare1 = new GameToken(this,GameToken.SQUARE, fieldHeight,fieldWidth);

    ...
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {

          super.onWindowFocusChanged(hasFocus);

          if(hasFocus) {
             System.out.println(mSquare1.getX());
             System.out.println(mSquare1.getY());
          }
    } 

我有以下错误

  

"预期的文件路径名或文件类对象,得到类型"

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:176)

在最新版本的pandas(0.19.2)中,您可以直接传递网址

import pandas as pd

url="https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv"
c=pd.read_csv(url)

答案 1 :(得分:105)

正如错误所示,pandas.read_csv需要一个类似文件的对象作为第一个参数。

如果要从字符串中读取csv,可以使用io.StringIO(Python 3.x)或StringIO.StringIO (Python 2.x)

此外,对于网址 - https://github.com/cs109/2014_data/blob/master/countries.csv - 您将返回html响应,而不是原始csv,您应该使用github页面中Raw链接提供的网址获取原始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')))

更新

从大熊猫0.19.2开始,您现在只需pass the url directly

答案 2 :(得分:7)

正如我评论你需要使用一个StringIO对象并解码即c=pd.read_csv(io.StringIO(s.decode("utf-8")))如果使用请求,你需要解码为.content返回 bytes 如果你使用.text就需要按s = requests.get(url).text c = pd.read_csv(StringIO(s))传递s。

更简单的方法是将原始数据的正确网址直接传递给read_csv不要必须传递类似的文件对象,您可以传递一个网址,这样您根本不需要请求:

c = pd.read_csv("https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv")

print(c)

输出:

                              Country         Region
0                             Algeria         AFRICA
1                              Angola         AFRICA
2                               Benin         AFRICA
3                            Botswana         AFRICA
4                             Burkina         AFRICA
5                             Burundi         AFRICA
6                            Cameroon         AFRICA
..................................

来自docs

filepath_or_buffer

  

字符串或文件句柄/ StringIO   字符串可以是URL。有效的URL方案包括http,ftp,s3和file。对于文件URL,需要主机。例如,本地文件可以是file://localhost/path/to/table.csv

答案 3 :(得分:4)

你遇到的问题是你进入变量的输出是什么?不是csv,而是html文件。 为了获得原始csv,您必须将URL修改为:

' https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv'

你的第二个问题是read_csv需要一个文件名,我们可以通过使用io模块中的StringIO来解决这个问题。 第三个问题是request.get(url).content提供了一个字节流,我们可以使用request.get(url).text来解决这个问题。

最终结果是这段代码:

from io import StringIO

import pandas as pd
import requests
url='https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv'
s=requests.get(url).text

c=pd.read_csv(StringIO(s))

输出:

>>> c.head()
    Country  Region
0   Algeria  AFRICA
1    Angola  AFRICA
2     Benin  AFRICA
3  Botswana  AFRICA
4   Burkina  AFRICA

答案 4 :(得分:2)

url = "https://github.com/cs109/2014_data/blob/master/countries.csv"
c = pd.read_csv(url, sep = "\t")

答案 5 :(得分:0)

  

要通过熊猫中的URL导入数据,只需应用下面的简单代码,它实际上会更好。

import pandas as pd
train = pd.read_table("https://urlandfile.com/dataset.csv")
train.head()
  

如果您对原始数据有疑问,只需在URL前面加上“ r”

import pandas as pd
train = pd.read_table(r"https://urlandfile.com/dataset.csv")
train.head()