使用pd.read_csv()时ParserError报错处理及skiprows计数规则疑问
pandas读取CSV时ParserError报错解决方案及skiprows参数规则说明
自动跳过所有错误行的实现方法
pandas 1.4.0及以上版本直接在pd.read_csv()中添加on_bad_lines='skip'参数即可,会自动跳过所有字段数不匹配的异常行,无需手动维护skiprows列表:
df1 = pd.read_csv('df1.csv', on_bad_lines='skip')
如果使用pandas 1.4.0之前的旧版本,替换为以下两个参数即可:
df1 = pd.read_csv('df1.csv', error_bad_lines=False, warn_bad_lines=True)
其中warn_bad_lines设为True时,会在跳过异常行时打印提示,方便统计被过滤的行数,不需要提示可以改为False。
skiprows参数计数规则差异说明
你观察到的计数差异,本质是skiprows接收不同类型参数时的语义完全不同:
- 传入单个整数
n时,参数含义是跳过文件开头的前n行,不是跳过序号为n的某一行。比如skiprows=177是跳过文件第1到177行,从第178行开始读取,如果你之前误认为该写法是仅跳过第177行,属于对参数语义的理解偏差。 - 传入列表时,列表中的元素是文件行的0-based索引:文件第一行的索引为0,第二行索引为1,以此类推。而ParserError报错中给出的行号是1-based计数的,比如报错提示的第12541行,对应的索引就是12541-1=12540,所以你需要在列表中填写「报错行号-1」才能匹配到对应行。
内容的提问来源于stack exchange,提问作者David Kouvchinov
相关产品推荐
相关产品推荐

