我有一个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
有没有办法删除这个块并继续下一个块的循环?
答案 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()