问题描述
我正在分块读取一个大文件,并且正在对每个块进行一些操作。 读取其中之一时,出现以下消息错误:
pandas.errors.ParserError:标记数据时出错。 C错误:在15929977行中预期有26个字段,看到了118
这意味着我的文件行之一与其他文件行没有采用相同的格式。
我以为我可以做的就是忽略这一部分,但是我没有办法做到。
我试图做一个try/except
块,如下所示:
data = pd.read_table('ny_data_file.txt', sep=',',
header=0, encoding = 'latin1', chunksize = 5000)
try:
for chunk in data:
# operations
except pandas.errors.ParseError:
# Here is my problem
我在这里写的是我的问题是,如果该块没有得到很好的解析, 我的代码将自动进入异常,甚至不进入for循环 ,但我想跳过此块并前进到下一个,我想在其中执行循环内的操作。
我已经检查了stackoverflow,但是在for循环上进行尝试的地方找不到类似的东西。 任何帮助,将不胜感激。
更新:
我已尝试按照评论中的建议进行操作:
try:
for chunk in data:
#operations
except pandas.errors.ParserError:
# continue/pass/handle error
但是仍然不能捕获异常,因为如上所述,异常是在从我的数据中获取chyunk时创建的,而不是在对其进行操作时创建的。
1楼
我了解到,在操作部分您会获得例外。 如果是这样:您应该继续:
for chunk in data:
try:
# operations
except pandas.errors.ParseError:
# continue
2楼
您try - except
使用try - except
的方式try - except
如果发现异常,将跳过整个for循环。
如果只想跳过一个迭代,则需要在循环内编写try-except,如下所示:
for chunk in data:
try:
# operations
except pandas.errors.ParseError as e:
# inform the user of the error
print("Error encountered while parsing chunk {}".format(chunk))
print(e)
3楼
我不确定在哪里抛出异常。 也许添加一个完整的错误堆栈会有所帮助。 如果该错误是由read_table()调用引发的,则可以尝试以下操作:
try:
data = pd.read_table('ny_data_file.txt', sep=',',
header=0, encoding = 'latin1', chunksize = 5000)
except pandas.errors.ParseError:
pass
for chunk in data:
# operations
4楼
正如@JonClements什么解决我的问题建议是使用error_bad_lines=False
在pd.read_csv
所以它只是跳过该行造成的麻烦,让我执行的,其余为循环。