代码示例:
data = 'a,b,c\n1,2,3\n4,5,6,7\n8,9,10'
pd.read_csv(StringIO(data), error_bad_lines=False)
Skipping line 3: expected 3 fields, saw 4
我想要的是获取跳过的行并将其保存在其他地方,如另一个DataFrame或Array。
我实际处理的每个文件的长度大约是8K行,有4到12列,跳过的行有一些我不想丢失的信息。
我尝试使用
try:
pd.read_csv(StringIO(data), error_bad_lines=False)
except(pd.parser.CParserError)
如何捕捉" Bad Line"?
答案 0 :(得分:1)
不确定官方(tm)方法是什么,但我经常通过names
然后进行后期处理。例如:
>>> pd.read_csv(StringIO(data), names=["a", "b", "c", "other stuff"], skiprows=1)
a b c other stuff
0 1 2 3 NaN
1 4 5 6 7
2 8 9 10 NaN
之后你可以使用像df[df['other stuff'].notnull()]
这样的布尔过滤来选择带有额外数据的过滤器。
我甚至做过像
这样的事情>>> pd.read_csv(StringIO(data), names=range(10), header=None)
0 1 2 3 4 5 6 7 8 9
0 a b c NaN NaN NaN NaN NaN NaN NaN
1 1 2 3 NaN NaN NaN NaN NaN NaN NaN
2 4 5 6 7 NaN NaN NaN NaN NaN NaN
3 8 9 10 NaN NaN NaN NaN NaN NaN NaN
过去开始,但是你必须确保在最后适当地转换dtypes,这样你就可以拥有浮动时没有较慢的对象。我通常只使用它作为中间步骤,然后立即写出格式更好的csv,所以它并不重要。
(我想要一种“无损”的数据读取方法,你不关心性能,你只关心获取所有数据,但据我所知,已经存在一种数据。)