簡體   English   中英

為什么pandas read_csv沒有讀取正確的行數?

[英]Why is pandas read_csv not reading the right number of rows?

我正在嘗試使用pandas read_csv打開部分csv文件。 我打開的部分在第746行有一個標題,然后轉到第1120行。

 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和pandas 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 + header小於此值時,為什么在它執行此操作之前它只會讀取232行?

除非我正在閱讀文檔錯誤,否則這看起來像是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對它進行了測試,它可以工作/不會提高!

我估計這是一個關閉/計數(用戶)錯誤! 也就是說, pd.read_csv(inputfile, header=746, nrows=374)讀取第1021條1索引行,因此您應該讀取少一行。 我可能弄錯了,但這就是我在想的......


在python行索引(與大多數python索引一樣)從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:

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

在下面我們讀取第3行(使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM