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

Python Pandas按标签访问数据触发KeyError问题求助

解决Pandas读取CSV后按标签访问触发KeyError的问题

我来帮你拆解下这个问题,其实是两个小细节没注意到导致的:

1. 问题根源解析

首先,你的CSV里的列名是用单引号包裹的,而且字段之间是逗号加空格分隔的。Pandas默认的read_csv参数不会自动处理这些单引号和空格,所以导入后的列名其实是带单引号和空格的(比如实际列名是'First'而非你预期的First),这直接导致你用'First'作为标签访问时找不到对应列。

另外,你用test.loc['First']的时候踩了个loc的用法坑:loc的第一个参数是行标签,第二个才是列标签。你的行索引是默认的数字序列(0、1...),自然找不到行标签'First',这就是报错提示“标签不在索引里”的直接原因。

2. 具体解决方案

方案一:调整read_csv参数自动解析列名

这是最简便的方法,直接在读取时告诉Pandas如何处理引号和空格:

import pandas as pd
test = pd.read_csv('test.csv', quotechar="'", skipinitialspace=True)
  • quotechar="':指定单引号为字段的包裹符,Pandas会自动去掉列名和数据里的单引号
  • skipinitialspace=True:忽略逗号后面的空格,避免列名或数据前出现多余空格

导入后你可以用print(test.columns)验证,列名会变成干净的First、Name等,之后:

  • 访问First列:test['First'] 或者 test.loc[:, 'First']
  • 访问第0行的First列:test.loc[0, 'First']
    都能正常返回结果了。

方案二:手动处理列名(适配特殊格式CSV)

如果CSV格式过于特殊,方案一没生效,可以手动提取并修正列名:

import pandas as pd
# 先把所有内容当成数据导入,不设置列名
test = pd.read_csv('test.csv', header=None)
# 提取第一行作为列名,去掉单引号和前后空格
new_columns = [col.strip("' ").strip() for col in test.iloc[0]]
# 设置新列名
test.columns = new_columns
# 删除原来的第一行(旧列名行)
test = test.iloc[1:]
# 重置索引
test.reset_index(drop=True, inplace=True)

处理完后列名就完全符合预期,后续的标签访问不会再出错。

3. 快速验证方法

不管用哪种方案,导入后先执行print(test.columns)和test.head()确认列名是否正确,这是排查这类问题的关键步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:02:07