我尝试从网址中读取@Override
public void nextTuple() {
if(count <= 100000) {
System.out.println("Emitting : " + count);
collector.emit(new Values(count++ + ""), count);
}
}
数据并通过ZipFile
使用StringIO
ZipFile
内的数据解析为csv
pandas.read_csv
最后一行给了我一个错误:
r = req.get("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").content
file = ZipFile(StringIO(r))
salaries_csv = file.open("Salaries.csv")
salaries = pd.read_csv(salaries_csv)
但是,如果我尝试使用
CParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.
它有效。
所以我想知道我在这里错过了什么。
salaries = pd.read_csv(file.open("Salaries.csv"))
应该返回一个file.open
对象,因为read_csv只接受字符串或文件句柄/ ZipExtFile
输入,为什么最后一行才有效呢?
答案 0 :(得分:1)
我认为你读取数据的方式有问题,使用urllib2对我有用。
from zipfile import ZipFile
from StringIO import StringIO
import urllib2
r = urllib2.urlopen("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").read()
file = ZipFile(StringIO(r))
salaries_csv = file.open("Salaries.csv")
salaries = pd.read_csv(salaries_csv)
yearID teamID lgID playerID salary
0 1985 BAL AL murraed02 1472819
1 1985 BAL AL lynnfr01 1090000
2 1985 BAL AL ripkeca01 800000
3 1985 BAL AL lacyle01 725000
4 1985 BAL AL flanami01 641667
5 1985 BAL AL boddimi01 625000
6 1985 BAL AL stewasa01 581250
7 1985 BAL AL martide01 560000
答案 1 :(得分:0)
Python 3.5 对@firelynx 的回答几乎没有变化
from zipfile import ZipFile
from io import BytesIO
import urllib.request as urllib2
r = urllib2.urlopen("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").read()
file = ZipFile(BytesIO(r))
salaries_csv = file.open("Salaries.csv")
salaries = pd.read_csv(salaries_csv)
print (salaries)