我正在使用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());
}
}
我有以下错误
"预期的文件路径名或文件类对象,得到类型"
我该如何解决这个问题?
答案 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()