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

Python中用ifelse逻辑创建新列时遇KeyError问题求助

解决创建条件列时的KeyError: 'y'问题

你遇到的KeyError: 'y'本质是你的DataFrame里不存在名为'y'的列,我们一步步来排查和解决:

第一步:确认DataFrame的列名

先运行这段代码,打印出所有列名,看看实际的列名是什么:

print(df.columns.tolist())

你大概率会发现以下几种情况之一:

  • 列名带有前后空格,比如' y'或者'y ',而非精确的'y'
  • 列名拼写错误,比如是'Y'、'y_value'之类的变体
  • 加载数据时重复列名被pandas自动重命名(比如你的数据集示例里有两个ds列,pandas会把第二个改成ds.1,y列也可能被意外改名)
  • 加载数据时不小心漏掉了y列

第二步:针对性解决

情况1:列名有空格

如果列名前后有空格,先统一清理所有列名的空格:

# 去掉所有列名的前后空格
df.columns = df.columns.str.strip()

之后再运行你原来的代码即可:

import numpy as np
df['New'] = np.where(df['y'] != 0, df['y'], df['yhat'])

情况2:列名拼写/命名不符

如果打印出来的列名里,y列的实际名称是'Y'或其他,只需要把代码里的'y'替换成实际列名就行。比如实际列名是'Y',代码修改为:

df['New'] = np.where(df['Y'] != 0, df['Y'], df['yhat'])

情况3:y列未被加载

如果列名列表里完全没有y相关的列,那你需要检查加载数据集的代码(比如用pd.read_csv()时是否用了usecols参数指定部分列,导致y列没被读进来),调整读取逻辑确保y列被包含。

替代实现方式(可选)

如果你确认列名正确,也可以用apply的方式实现同样逻辑(不过np.where在大数据集上效率更高):

df['New'] = df.apply(lambda row: row['y'] if row['y'] != 0 else row['yhat'], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:22:23