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

为何Pandas DataFrame列操作触发KeyError: 'y1'?求故障原因

KeyError: 'y1' 报错原因分析

问题场景

在Python 3.11与Pandas 2.2环境中,执行以下脚本可正常运行:

import pandas as pd

df = pd.read_csv('test.csv', comment='#')
df['x1'] = df['x1']*8
# df['y1'] = df['y1']*8
print(df)

执行输出:

x1   y1
0   0    0
1  16    6
2  32   12

但取消注释df['y1'] = df['y1']*8后,脚本抛出KeyError: 'y1'异常,已知test.csv内容如下:

# comment 
x1, y1
0, 0
2, 6
4, 12

报错核心原因

  • 你的CSV文件列名里暗藏空格:y1列的实际列名是' y1'(逗号后有一个空格),但代码里调用的是无空格的'y1',两者不匹配,导致Pandas找不到对应列。
  • 未取消注释时没报错,是因为代码没有主动访问该列;而Pandas打印DataFrame时,会自动隐藏列名的前导空格(显示为y1),给你造成了列名无空格的视觉错觉。
  • 可以通过执行print(df.columns)验证,输出会显示Index(['x1', ' y1'], dtype='object'),明确列名带空格。

解决办法

  • 方案1:修改CSV文件,删除列名里的空格,将第一行数据改为x1,y1
  • 方案2:读取CSV时添加skipinitialspace=True参数,让Pandas自动忽略列名和字段值的前导空格:
df = pd.read_csv('test.csv', comment='#', skipinitialspace=True)
  • 方案3:代码中使用带空格的列名:
df[' y1'] = df[' y1']*8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:02:07