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

Pandas读取CSV文件未读取完整内容 丢失行且无法操作空白单元格

问题根因

两个问题的核心原因都是pandas.read_csv()默认参数和你的无表头CSV结构不匹配:

  • 丢行问题:read_csv默认header=0,会自动把第一行识别为列名,不算入有效数据行。你的CSV全是业务数据、没有专门的表头行,因此第一行yes,yes...被直接当成列名处理,实际读入的数据只有原文件的第2-6行共5行。后续to_csv时你设置了header=False不输出列名,写回的文件自然就少了1行。之前添加nrows=6、skip_blank_lines=False不生效,是因为这两个参数不会修改默认的表头识别逻辑,文件扣除被识别为表头的第一行后只剩5行数据,设再大的nrows也读不满6行。
  • 无法写入超范围单元格:读入的DataFrame本身只有5行数据,维度和你预期的6行6列结构不匹配,自然无法给不存在的行/列赋值。另外注意:iat索引从0开始计数,6行数据的合法行索引范围是0-5,你之前尝试传入索引6本身就属于越界传参,哪怕读取维度正确也会触发报错。

修复方案

  1. 读取CSV时必须添加header=None参数,明确告知pandas当前文件没有表头,所有行都是有效数据行。
  2. 如果需要操作比当前文件内容更大范围的单元格(比如后续要写入第10行、第10列,哪怕当前文件只有6行),读入数据后主动用reindex把DataFrame扩展到你需要的目标行列数,空缺位置自动填充你需要的默认值(比如你当前场景的默认值是yes)。
  3. 写回CSV时保持index=False、header=False参数,避免额外写入行索引或表头内容。

可直接运行的修复代码

import pandas

# 按需修改配置项:目标CSV行列数、单元格默认值、文件路径
TARGET_ROWS = 6
TARGET_COLS = 6
DEFAULT_CELL_VALUE = "yes"
CSV_PATH = 'path/to/my/script/test.csv'

# 读取时指定header=None,不将第一行识别为表头
data = pandas.read_csv(CSV_PATH, header=None, skip_blank_lines=False)

# 扩展DataFrame到目标行列数,空缺位置自动填充默认值
data = data.reindex(
    index=range(TARGET_ROWS),
    columns=range(TARGET_COLS),
    fill_value=DEFAULT_CELL_VALUE
)

# 正常执行单元格赋值即可,注意iat索引顺序为[行位置, 列位置],从0开始计数
data.iat[1, 1] = 'DataHere'
# 只要在TARGET_ROWS、TARGET_COLS范围内的单元格,哪怕原文件不存在对应行/列都可以正常写入
# data.iat[5, 3] = 'TestData' # 对应第6行第4列

# 写回文件,关闭索引和表头输出
data.to_csv(CSV_PATH, index=False, header=False)

效果验证

用你提供的初始6行全yes的CSV运行上述代码后,写回的文件会保持完整6行6列结构,第二行第二列正确写入DataHere,不会出现末尾行丢失的问题。后续如果需要操作更大尺寸的表格,只需要调大TARGET_ROWS和TARGET_COLS的数值即可,不需要手动预填CSV内容,扩展逻辑会自动补全默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:03:27