You need to enable JavaScript to run this app. pandas读取CSV生成DataFrame行数少于实际行数的可能原因
优惠活动
大模型
产品
解决方案
定价
更多

pandas读取CSV生成DataFrame行数少于实际行数的可能原因

行数差异的核心原因

VIM和pandas的行数统计口径从根本上就不一样:VIM统计的是文本物理换行数——只要遇到一个\n换行符,就算1行;pandas统计的是符合TSV格式解析规则的独立有效数据记录数,两者出现差值非常常见。结合你给出的差值(41858 - 40615 = 1243行),常见的触发场景有以下几类:

  • 空白行被pandas自动跳过。pd.read_csv默认开启skip_blank_lines=True,会直接忽略文件中没有任何有效内容的空行,不会把这些空行纳入DataFrame的记录范围。但VIM会对所有物理换行计数,哪怕行内全是空内容。如果你的文件里有1000多行用来做分隔的空白行,差值会完全匹配。
  • 带内嵌换行的字段被识别为单条记录。如果TSV文件中某些单元格的文本本身包含换行符,且这些字段按格式规范被双引号包裹,pandas会把整段带换行的文本识别为同一个单元格的内容,不会把内嵌的换行拆成独立记录。但VIM碰到这些内嵌换行时,会直接当成独立的物理行计数,这部分多算的内容就会推高VIM的统计值。
  • 格式异常的坏行被静默丢弃。如果你的pandas环境配置了on_bad_lines='skip',解析时遇到列数和表头不匹配的行(比如某行缺了tab分隔符、多了tab导致列数不对),pandas会直接跳过这些行不抛出错误,自然不会计入最终行数。你这里显式指定了sense列为int类型,如果某行拆分后对应sense列的内容无法转成整数,也可能触发坏行判定被跳过。
  • 未闭合引号导致的跨多物理行合并。如果文件某行的字段出现了没有配对的双引号,pandas的解析器会从这个引号位置开始,一直向下寻找匹配的右引号,把中间跨越的好几个物理文本行都合并成同一个单元格的内容。原本独立的多个物理行被合并成1条数据记录时,最终的DataFrame行数就会比VIM统计的物理行数少很多。

快速排查方法:读取文件时加上on_bad_lines='warn'、同时关闭空行跳过(设置skip_blank_lines=False),再统计返回的DataFrame行数,同时观察控制台输出的坏行警告,就能快速定位差值来源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 13:54:01