Python使用pandas读取CSV获取指定列触发KeyError问题
异常原因
两个问题共同触发了KeyError:
- 核心问题:CSV读取时没有正确识别列分隔符,所有字段被合并成了单列。从你贴的
print(df.columns)输出可以看到,返回的Index对象仅包含1个元素,值是拼接了所有表头的完整字符串#,Name,Type 1,Type 2,HP,Attack,Defense,Sp. Atk,Sp. Def,Speed,Generation,Legendary,说明pandas没有将字符串中的逗号识别为列分隔符,解析出的DataFrame实际只有1列,自然不存在你要查询的列。 - 细节问题:pandas列名匹配是大小写敏感的,就算列被正确拆分,表头里的列名是大写开头的
Name,你代码里写的全小写name也无法匹配到对应列,同样会触发KeyError。
修复步骤
- 首先在读取CSV时显式指定分隔符为逗号,强制pandas按逗号拆分列,代码修改为:
import pandas as pd df = pd.read_csv('pokemon_data.csv', sep=',')
如果执行完还是只有单列,可以补充编码参数适配带BOM头的UTF-8文件:
df = pd.read_csv('pokemon_data.csv', sep=',', encoding='utf-8-sig')
- 读取后验证拆分结果,执行
print(df.columns),正常拆分后的输出应该是每个列名单独作为Index的元素,格式如下:
Index(['#', 'Name', 'Type 1', 'Type 2', 'HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Generation', 'Legendary'], dtype='object')
如果列拆分正常但仍提示找不到列,可以执行下面的代码去除列名前后可能存在的空格、不可见字符:
df.columns = df.columns.str.strip()
- 最后用大小写完全匹配的列名取值,打印Name列的代码修改为:
print(df['Name'])
内容的提问来源于stack exchange,提问作者Jujubean124
相关产品推荐
相关产品推荐

