格式错误的CSV文件和Pandas read_csv由块

时间:2014-12-17 13:33:21

标签: python csv pandas

我有一个csv文件:22 Go size,46000000行 为了节省内存,csvfile由块读取和处理。

tp = pd.read_csv(f_in, sep=',', chunksize=1000, encoding='utf-8',quotechar='"') 
for chunk in tp: 
   chunk;

但该文件格式错误并引发异常:

Error tokenizing data. C error: Expected 87 fields in line 15092657, saw 162

有没有办法删除这个块并继续下一个块的循环?

3 个答案:

答案 0 :(得分:1)

这个问题类似于之前在这里发现的问题: Python Pandas Error tokenizing data

正如在答案中所说,您必须注意使用error_bad_lines = False会删除该行,并建议更好的方法是调查数据集中的行。

答案 1 :(得分:1)

正如EdChum所说,问题是如何跳过大块,并添加' error_bad_lines = False'做的伎俩。 有没有办法拦截痕迹给出坏线并计算错误线?

答案 2 :(得分:1)

要拦截坏线,我使用以下代码:

# somewhere to store output
err = StringIO.StringIO()
# save a reference to real stderr so we can restore later
oldstderr = sys.stderr
# set stderr to our StringIO instance
sys.stderr = err

tp = pd.read_csv(f_in, sep=',', chunksize=1000, encoding='utf-8',quotechar='"', error_bad_lines=False) 
for chunk in tp:
      chunk

# restore stderr 
sys.stderr = oldstderr

# print(or use) the stored value from previous print
print err.len + 'lines skipped.'
print err.getvalue()
err.close()