Python 使用pandas ReadCSV和nrows读取~13000行CSV文件的部分内容

Python 使用pandas ReadCSV和nrows读取~13000行CSV文件的部分内容,python,csv,python-3.x,pandas,Python,Csv,Python 3.x,Pandas,我试图将CSV文件的片段读入pandas数据帧,当我将nrows设置为超过某个点时,我遇到了麻烦。我的CSV文件被分成不同的段,具有不同的标题/数据类型,因此我浏览了该文件,找到了不同段的行号,并保存了行号。当我尝试这样做时: pd.io.parsers.read_csv('filename',skiprows=40, nrows=12646) 它很好用。如果没有更多行,它将抛出一个错误: CParserError: Error tokenizing data. C error: Expect

我试图将CSV文件的片段读入pandas数据帧,当我将nrows设置为超过某个点时,我遇到了麻烦。我的CSV文件被分成不同的段,具有不同的标题/数据类型,因此我浏览了该文件,找到了不同段的行号,并保存了行号。当我尝试这样做时:

pd.io.parsers.read_csv('filename',skiprows=40, nrows=12646)
它很好用。如果没有更多行,它将抛出一个错误:

CParserError: Error tokenizing data. C error: Expected 56 fields in line 13897, saw 71
行13897确实有那么多行,这就是为什么我尝试使用nrows和skiprows。我能找到熊猫们要读的最后一行,它看起来和其他的没有什么不同。在十六进制编辑器中查看该文件,我仍然没有看到任何差异

我还尝试了另一个CSV文件,得到了类似的结果:

pd.io.parsers.read_csv('file2',skiprows=112, nrows=18524)

<class 'pandas.core.frame.DataFrame'>
Int64Index: 18188 entries, 0 to 18187
给出:

CParserError: Error tokenizing data. C error: Expected 56 fields in line 19190, saw 71
有什么我遗漏的吗?还有别的办法吗


我在Windows上使用:
pandas-0.10.1.win-amd64-py3.3
numpy-MKL-1.7.1rc1.win-amd64-py3.3
,以及
python-3.3.0.amd64
。我在
numpy-unoptimized-1.7.1rc1.win-amd64-py3.3中遇到了同样的问题
您可以使用
警告坏线
错误坏线
关闭坏线错误和警告:

import pandas as pd
from StringIO import StringIO
data = StringIO("""a,b,c
1,2,3
4,5,6
6,7,8,9
1,2,5
3,4,5""")
pd.read_csv(data, warn_bad_lines=False, error_bad_lines=False)

这一行是否有可疑之处,比如它有70个逗号,而之前的每一行都有55个…?错误所指的那一行是70个逗号,是的。但是有了滑雪道和nrows,我试图阻止它到达那条线。例如,当错误指向第13897行时,我尝试从第40行读取到12647+40行。我试图指定的行是正常的(55个字段)。这似乎可行,但我仍然想知道为什么它首先抛出错误。我同时使用StringIO缓冲区编写了一个变通解决方案,但正如我所说的,我想知道为什么它会给我一个错误,因为它没有被告知要读取的行。pd.read_csv从StringIO读取(相同的)数据精细(没有bad_行标志),StringIO由文件的行组成,我试图告诉它使用nrows和skiprows读取。
import pandas as pd
from StringIO import StringIO
data = StringIO("""a,b,c
1,2,3
4,5,6
6,7,8,9
1,2,5
3,4,5""")
pd.read_csv(data, warn_bad_lines=False, error_bad_lines=False)