Python 为什么熊猫读取的行数不正确?

Python 为什么熊猫读取的行数不正确?,python,csv,pandas,Python,Csv,Pandas,我正在尝试使用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

我正在尝试使用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

当nrows+标题小于此值时,为什么它试图打开第1121行,为什么它在执行此操作之前只读取232行?

我认为这是一个关/计数(用户)错误!也就是说,
pd.read\u csv(inputfile,header=746,nrows=374)
读取1021st1-indexed行,因此您应该少读一行。我可能弄错了,但我是这么想的


在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 [15]: pd.read_csv(StringIO(s), header=1, nrows=3)
CParserError: Error tokenizing data. C error: Expected 2 fields in line 5, saw 4

除非我看错了文档,否则这看起来像是
read\u csv
中的一个bug(我建议在github上填写一个问题!)

解决方法,因为您的数据很小(以字符串的形式在行中读取):


我用你提供的csv测试了这一点,它有效/无效

谢谢。我是一个足以犯那个错误的新手,但我不认为这是在这个案件中发生的事情。如果是的话,将行数从374更改为373应该可以修复它,但是我需要将它更改为更少的行数才能正常工作。您需要将它更改为什么?也许还有一排废品?231是我能去的最高点。奇怪的是,如果我增加标题行(例如,增加到800行),只要我不增加超过231行的行数,它仍然有效。你能链接到这个数据集吗?这听起来很奇怪,可能也值得作为github发布!还有河流水位!一个贴心的话题!!(我不能再+1了!)谢谢你的帮助。我也会在github上提出这个问题。@ChrisLeahy:你在github上归档了吗?这一问题似乎在两年后的0.19版本中仍然存在!对于仍然遇到这种情况的人来说,这是一个bug,应该在0.19.2中修复。在此之前,使用engine='python'是最好的解决方法。
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
from StringIO import StringIO
with open(inputfile) as f:
    df = pd.read_csv(StringIO(''.join(f.readlines()[:1120])), header=746, nrows=374)