我的档案是这个
4 7 a a
s g 6 8 0 d
g 6 2 1 f 7 9
f g 3
1 2 4 6 8 9 0
我正在使用pandas以pandas对象的形式保存它。但我收到以下错误
pandas.parser.CParserError: Error tokenizing data. C error: Expected 6 fields in line 3, saw 8
我使用的代码是
file = pd.read_csv("a.txt",dtype = None,delimiter = " ")
有人可以建议将文件包含在内吗?
答案 0 :(得分:2)
这是单向的。
In [50]: !type temp.csv
4,7,a,a
s,g,6,8,0,d
g,6,2,1,f,7,9
f,g,3
1,2,4,6,8,9,0
将csv读取到列表列表,然后转换为DataFrame。
In [51]: pd.DataFrame([line.strip().split(',') for line in open('temp.csv', 'r')])
Out[51]:
0 1 2 3 4 5 6
0 4 7 a a None None None
1 s g 6 8 0 d None
2 g 6 2 1 f 7 9
3 f g 3 None None None None
4 1 2 4 6 8 9 0
答案 1 :(得分:-1)
使用pandas会引发错误,因为函数需要有一定数量的列,在这种情况下为6,但是当它到达第三行时遇到了8.一种处理这种情况的方法是不读取列数多于数据帧第一行的行数。这可以使用error_bad_lines
参数完成。这就是文档对error_bad_lines
所说的内容:
error_bad_lines:boolean,default True包含太多字段的行 (例如,逗号太多的csv行)默认会导致 要引发的异常,并且不会返回任何DataFrame。如果为假, 然后这些“坏线”将从DataFrame中删除 回。 (仅对C解析器有效)
所以你可以这样做:
>>> file = pd.read_csv("a.txt",dtype = None,delimiter = " ",error_bad_lines=False)
Skipping line 3: expected 6 fields, saw 8
Skipping line 5: expected 6 fields, saw 7
>>> file
4 7 a a.1
s g 6 8.0 0.0 d
f g 3 NaN NaN NaN
或者您可以使用skiprows
参数跳过您想要的行,这是文档对skiprows
所说的内容:
skiprows:list-like或integer,default无要跳过的行号 (0索引)或文件开头要跳过的行数(int)