You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何pandas.read_csv在测试与主代码中读取空值表现不一致?

测试与主程序中pandas.read_csv读取CSV的差异原因分析

核心原因:CSV格式不规则 + 环境/参数默认行为差异

以下是具体的几点可能:

  1. 实际读取的文件并非同一文件
    虽然你提到测试和主代码用的是相同CSV列表,但测试脚本在独立文件夹,主程序的工作目录可能不同。如果filelist里用的是相对路径,主程序执行时会从自身工作目录找文件,可能读到的是另一个版本的CSV(比如上级目录的同名文件),导致格式不一致。

  2. pandas版本或解析引擎的默认行为差异
    测试环境和主程序的pandas版本可能存在差异:

  • 旧版pandas遇到不规则列数的CSV时,配合dtype指定多列类型,可能自动用NaN填充缺失列,不会触发usecols匹配错误;
  • 新版pandas对usecols的校验更严格,如果解析时推断的列数少于usecols指定的数量,直接报错。
    另外,测试时可能因为dtype参数的存在,隐式触发了Python引擎(而非默认的C引擎),Python引擎对不规则行的兼容性更好;而主程序中默认用C引擎,对列数推断更严格,导致冲突。
  1. CSV文件行格式不规则,测试时刚好命中兼容场景
    你的CSV本身没有固定列数,不同段落的列数不一样:
  • 测试代码读取前15行,其中包含了有4列的行(比如第0行),pandas据此推断列数为4,所以usecols=(0,1,2,3)能匹配;
  • 主程序中可能因为文件被修改、读取时的指针位置问题,pandas解析时先读到了只有1列的行,推断列数为1,导致usecols指定的列不存在,触发报错。

简化后续代码的建议

既然CSV是分段落有固定列数的结构,你可以:

  • 先读取整个文件为纯文本行,按段落分割后再分别解析成DataFrame;
  • 统一使用Python引擎(engine='python'),配合warn_bad_lines=True跳过解析错误的行,再按位置处理数据;
  • 确认测试和主程序的工作目录一致,确保读取的是同一个CSV文件,同时对齐两边的pandas版本和解析参数。

内容的提问来源于stack exchange,提问作者jhollidge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:55:30