Python 熊猫在读取csv时跳过行,我可以将这些记录到变量/日志文件中吗

Python 熊猫在读取csv时跳过行,我可以将这些记录到变量/日志文件中吗,python,pandas,dataframe,Python,Pandas,Dataframe,我在这里看到过类似的问题,但没有什么是我想做的 我正在使用读取tsv/csv文件 try: dataframe = pd.read_csv( filepath_or_buffer=filename_or_obj, sep='\t', encoding='utf-8', skip_blank_lines=True,

我在这里看到过类似的问题,但没有什么是我想做的

我正在使用读取tsv/csv文件

        try:
            dataframe = pd.read_csv(
                filepath_or_buffer=filename_or_obj,
                sep='\t',
                encoding='utf-8',
                skip_blank_lines=True,
                error_bad_lines=False,
                warn_bad_lines=True,
                dtype=data_type_dict,
                engine='python',
                quoting=csv.QUOTE_NONE
            )
        except UnicodeDecodeError:
            dataframe = pd.read_csv(
                filepath_or_buffer=exception_filename_or_obj,
                sep='\t',
                encoding='latin-1',
                skip_blank_lines=True,
                error_bad_lines=False,
                warn_bad_lines=True,
                dtype=data_type_dict,
                engine='python',
                quoting=csv.QUOTE_NONE
            )
我在文件中有明确定义的标题,但有时我会看到该文件有意外的附加列,并在控制台中获得以下消息

跳过第251643行:第251643行预计有20个字段,saw 21

这对于我的流程来说是很好的,我只想知道一种方法,可以将这些消息或行记录到数据帧或日志文件中,以便知道跳过了哪些行。由于文件可以由任何人提交,这是一个格式问题,因此我对修复消息不感兴趣,只是记录失败的行号

大量提前感谢:)


编辑:include try except子句

为了重现该问题,我使用了以下CSV文件(dummy.CSV):

F1、F2、F3
11、A、10.54
18,B,0.12,低
24、A、19.00
10,C,7.01,低
22,D,39.11,偏高
49,E,12.12
可能需要注意的是,有些行有额外的字段

由于我们使用的是
error\u bad\u lines=False
,因此不会引发任何错误/异常,因此
try except
不是前进的方向。我们需要重定向
stderr

从contextlib导入重定向\u stderr
作为pd进口熊猫
#输入io
将open('error_messages.log','w')作为h:
#f=io.StringIO()
#使用重定向\u stderr(f):
使用重定向标准(h):
df=pd.read\u csv(filepath\u或\u buffer='dummy.csv',
sep=',',#为您的数据更改它
编码='latin-1',
跳过空白行=真,
错误\u错误\u行=错误,
#数据类型=数据类型,
engine='python',
#quoting=csv.QUOTE“无
)
#h.write(f.getvalue())#将错误消息写入日志文件
打印(df)
上面的代码将消息写入日志文件

以下是日志文件的示例输出:

跳过第3行:第3行中应该有3个字段,SAW4
跳过第5行:第5行应包含3个字段,SAW4
跳过第6行:第6行中预期有3个字段,SAW4
更新


根据建议修改了代码(在下面的评论中)

使用
try-except
在loop@anurag也不例外raised@C.Nivs您能提供一些示例数据吗?@anurag,行中的列数超过标题行中的列数的任何数据都会出现这种情况(下面的示例)
COL\u 1、COL\u 2、COL\u 3 data1、data2、data3 data1、data2、data3、data4我注释掉了
dtype
quoting
,启用它们供您使用!这是一个很好的答案。我没有使用
io.StringIO
实例就尝试了它。将
h
传递到
redirect\u stderr
并删除
h.write(f.getvalue())
@anurag,太好了,非常感谢:)