2014-09-23 95 views
3

我想用pandas read_csv打開一部分csv文件。我打開一節對線746頭,並進入行1120爲什麼pandas read_csv沒有讀取正確的行數?

gr = read_csv(inputfile,header=746,nrows=374,index_col=False) 

然後我得到一個錯誤

CParserError: Error tokenizing data. C error: Expected 9 fields in line 1121, saw 17 

錯誤是有道理的,因爲在文件的1121行,數據從9個字段變爲17個。沒有任何意義的是它試圖讀取1121行的原因,因爲這些nrows和header應該只能打開多達1120行。

我可以通過減少行數在232以下。即使我增加標題號碼,它仍然有效,因此它開始進一步(例如將其增加到800)。

它將讀取的最後一行看起來沒有什麼特別之處,如果我增加標題號碼,它會在文件中讀取更多行。

我使用Python 2.7和熊貓0.14。

的文件,我想讀的樣子:

"River Levels","GRETA_SOUTH  (C)","GLENROWAN  (C)","ROCKY_POINT  (C)","DOCKER_RD  (C)","BOBINAWARRAH  (C)","WOOLSHED   (C)","WANGARATTA  (C)","PEECHELBA_EAST (C)" 
41812.00001,   0.70,   0.00,   0.00,   0.20,   0.00,   0.00,   7.30,  125.00 
41812.04168,   0.70,   0.00,   0.00,   0.20,   0.00,   0.00,   7.30,  125.00 

爲什麼打不開線1121,當NROWS +頭小於這個,它爲什麼會只讀232線它之前這個?

+0

也河水平!一個接近我自己心的話題! (我不能再+1!) – 2014-09-24 05:28:40

回答

1

除非我在看文檔錯誤的,這看起來像在read_csv(我建議在GitHub上填寫一個問題的錯誤! )。

一種解決方法,因爲你的數據是短小(讀取該行作爲一個字符串):

from StringIO import StringIO 
with open(inputfile) as f: 
    df = pd.read_csv(StringIO(''.join(f.readlines()[:1120])), header=746, nrows=374) 

我與您提供的CSV測試這和它的作品/不提高!

+0

謝謝你的工作。我將在github上提出這個問題。 – 2014-09-24 06:51:14

+0

@ChrisLeahy:你是否在GitHub上存檔?這個問題在兩年後似乎仍然存在Pandas 0.19! – 2016-11-21 01:25:00

+2

對於仍然遇到這個問題的人來說,這是一個錯誤,應該修正爲0.19.2。在此之前使用engine ='python'是最好的解決方法。 – 2016-12-06 06:01:12

0

我認爲這是一個/計數(用戶)錯誤!也就是,pd.read_csv(inputfile, header=746, nrows=374)讀取的是1021st 1索引行,所以您應該讀取更少的行。我可能是錯誤的,但在這裏就是我想...


在蟒蛇線索引(與大多數蟒索引)從0開始

In [11]: s = 'a,b\nA,B\n1,2\n3,4\n1,2,3,4' 

In [12]: for i, line in enumerate(s.splitlines()): print(i, line) 
0 a,b 
1 A,B 
2 1,2 
3 3,4 
4 1,2,3,4 

你的通常方式想行號爲1:

​​

在我們閱讀了下面的第三行(與Python索引)或第4(1索引):

In [13]: pd.read_csv(StringIO(s), header=1, nrows=2) # Note: header + nrows == 3 
Out[13]: 
    A B 
0 1 2 
1 3 4 

如果我們包括下一行,它會提高:

In [15]: pd.read_csv(StringIO(s), header=1, nrows=3) 
CParserError: Error tokenizing data. C error: Expected 2 fields in line 5, saw 4 
+0

謝謝。我足夠做一個新手來做這個錯誤,但我不認爲這是這樣的情況。如果是這樣,將行數從374改爲373應該可以解決這個問題,但我需要將它改爲更少的工作。 – 2014-09-23 07:29:32

+0

你需要改變它到什麼程度?也許還有另一個排? – 2014-09-23 20:11:06

+0

231是我能走的最高境界。奇怪的部分是,如果我增加頭線(例如到800),它仍然工作,只要我不增加過去的231線的數量。 – 2014-09-24 00:20:43

相關問題