Parallels Desktop中文网站 > 最新资讯 > pd读取CSV为什么失败 pd读取参数应怎样指定
教程中心分类
pd读取CSV为什么失败 pd读取参数应怎样指定
发布时间:2025/12/30 11:25:58

  pandas读CSV失败几乎是每个搞数据的人都踩过的坑:一会儿报UnicodeDecodeError,一会儿报ParserError,一会儿明明有100列却只读出来1列,搞得人怀疑人生。今天我们就把pd.read_csv为什么莫名其妙失败、以及最常用也最容易踩雷的参数到底该怎么指定,一次性讲透,照着抄以后再也不掉坑里。

  一、pd读取CSV为什么失败

 

  读不出来的根源基本就这五类,90%的情况都中:

 

  1、编码不对,最常见也最隐蔽

 

  导出CSV基本都是gbk/gb2312/utf-8-sig,pandas默认猜utf-8,遇到中文直接UnicodeDecodeError;

 

  2、分隔符不是逗号

 

  很多人用Excel保存CSV其实用的是制表符、分号、竖线,甚至中文逗号“,”pandas死活猜不对,报“CParserError:Error tokenizing data”;

 

  3、有BOM头或隐藏字符

 

  用Windows记事本、WPS、国内报表系统保存的CSV前面会带个BOM(ufeff),pandas直接把第一列名读成“ufeffID”,或者把第一行当列名吞掉;

 

  4、行里换行或引号没闭合

 

  Excel里某个单元格写了多行文字(Alt+Enter),或者引号没成对,pandas直接报“ParserError:Expected X fields in line Y,saw Z”;

 

  5、文件太大直接爆内存

 

  几百MB甚至GB的CSV,pandas一次性全读进内存直接OOM,或者卡死半天没反应。

 

  二、pd读取参数应怎样指定

 

  下面这套参数组合能解决95%的场景,直接抄就行:

 

  1、最稳万能版(推荐日常直接用)

 

  2、报表专用(gbk+中文逗号+BOM)

 

  3、大文件分块读(>500MB)

 

  4、有多行表头或跳过垃圾行

 

  5、列名在第2行+第1行是标题合并

 

  三、pd读取CSV长效不翻车技巧

 

  一次成功不等于下次不炸,再补这几招彻底根治:

 

  1、永远先用记事本或VS Code打开CSV看一眼

 

  看编码、分隔符、是否有BOM、表头几行、最后有没有合计行,比直接跑代码快100倍;

 

  2、写一个万能读取函数放项目里

 

  以后全项目统一调这一个,永不踩坑;

 

  3、大文件先用Linux命令预处理

 

  4、永远先读100行测试

 

  确认没问题再全量读;

 

  5、公司统一禁止用Excel保存CSV

 

  要求财务/业务用“另存为→UTF-8 CSV”或直接导出tsv,彻底杜绝BOM和中文逗号。

  总结

 

  pd读取CSV为什么失败,pd读取参数应怎样指定,说白了就是编码、分隔符、BOM、换行、大文件这五大杀手。只要记住万能参数组合(utf-8-sig+sep=None+engine='python'+dtype=str)、先看文件再读、写safe_read_csv函数、大文件分块读、公司禁Excel保存这五板斧,读CSV就能从“玄学”变成“复制粘贴就行”,再也不用半夜被“ParserError”惊醒。

135 2431 0251