Pandas读取含坏行CSV时提取错误行号与日志记录方案问询
Pandas读取CSV坏行警告处理方案
干净警告列表提取
你拿到的输出是bytes对象的序列化字符串,直接做字符串替换容易误处理内容中的特殊字符,更稳妥的处理方式如下:
import ast from contextlib import redirect_stderr import io import pandas as pd f = io.StringIO() with redirect_stderr(f): df = pd.read_csv(fname, sep=',', error_bad_lines=False, warn_bad_lines=True) msg_list = [] if f.getvalue(): msg = f.getvalue() # 解析序列化的bytes字符串,转成正常文本 raw_bytes = ast.literal_eval(msg.strip().strip('"')) warn_content = raw_bytes.decode('utf-8') # 拆分+过滤空行直接得到目标列表 msg_list = [line for line in warn_content.splitlines() if line.strip()]
处理后得到的msg_list就是你需要的格式,直接遍历列表调用write_log方法即可逐行写入日志。
坏行行号提取
基于上面得到的msg_list,可以快速提取所有坏数据行号:
import re bad_line_nums = [] for line in msg_list: match_obj = re.search(r'Skipping line (\d+):', line) if match_obj: bad_line_nums.append(int(match_obj.group(1)))
最终bad_line_nums就是存储所有坏行号的列表,比如示例中的[4,6]。
版本兼容说明
你当前使用的pandas 1.1.5版本支持error_bad_lines、warn_bad_lines参数,无需调整;如果后续升级pandas到更高版本,可替换为on_bad_lines='warn'参数实现相同效果。
内容的提问来源于stack exchange,提问作者Prish
相关产品推荐
相关产品推荐

