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

处理LIDC-IDLI数据集时pandas读csv报KeyError: 'Modality'的原因及解决

错误产生原因

  • 你调用pd.read_csv()时指定了header=None参数,该参数会强制pandas将csv文件的第一行当作普通数据行处理,而非列名行。即便你传入了names=column_names指定列名,只要column_names列表内未包含Modality,或者你定义的column_names和csv实际的列数量、顺序不匹配,都会导致最终生成的DataFrame不存在名为Modality的列,访问时就会抛出KeyError。
  • 另一种可能是你本地的csv元数据文件本身没有Modality字段,或者字段名存在拼写误差,比如大小写不一致、前后附带空格,例如实际列名为modality或者 Modality。

解决方法

第一步:先排查DataFrame的实际列名

读取文件后先打印列名确认问题,运行如下代码:

meta = pd.read_csv(metadatapath, header=None, delimiter=",", names=column_names)
print(meta.columns.tolist())

如果输出的列表里没有Modality,先检查column_names的定义是否正确,是否和csv文件的列一一对应。

第二步:修正csv读取参数

如果你的csv文件本身第一行就是列名,直接去掉header=None参数即可,pandas会自动把第一行识别为列名,不需要额外传入names参数:

# csv第一行是自带列名的场景
meta = pd.read_csv(metadatapath, delimiter=",")

如果确实需要自定义列名,确保column_names列表的长度和csv的列数完全一致、顺序对应,且包含Modality字段:

# 确认column_names定义正确,示例如下,按实际列补全即可
column_names = ["SeriesInstanceUID", "Modality", "PatientID", ...]
meta = pd.read_csv(metadatapath, header=None, delimiter=",", names=column_names)

第三步:校验字段拼写

如果列名存在大小写差异、多余空格的情况,统一修正后再操作:

# 去除列名前后空格
meta.columns = meta.columns.str.strip()
# 或者直接重命名对应列
meta = meta.rename(columns={"modality": "Modality"})

修正后的完整参考代码

import pandas as pd

# csv第一行自带包含Modality的列名的场景
meta = pd.read_csv(metadatapath, delimiter=",")
meta = meta.drop(meta[meta['Modality']!='CT'].index)
meta = meta.reset_index(drop=True) # 加drop=True可避免生成多余的index列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:45:01