将pd.read_csv跳过的行保存到单独的DataFrame中

时间:2014-06-12 18:28:48

标签: python pandas

代码示例:

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"?

其中一个文件:http://www.pjm.com/pub/account/loadhryr/1998.txt

1 个答案:

答案 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,所以它并不重要。

(我想要一种“无损”的数据读取方法,你不关心性能,你只关心获取所有数据,但据我所知,已经存在一种数据。)