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

运行Pandas代码时触发KeyError: 'control_percent'错误求助

解决Pandas中KeyError: 'control_percent'的问题

核心原因

KeyError说明你的DataFrame里不存在名为control_percent的列(或是你误把行索引当成了列名),按以下步骤排查和修复:

步骤1:确认数据结构

先打印所有列名,验证control_percent是否存在:

print(df.columns.tolist())
  • 如果列名不在输出里,检查数据加载环节:比如读取CSV/Excel时有没有正确指定表头、分隔符,或是列名拼写错误(比如大小写、多空格、写成control_percentage)。
  • 如果control_percent是行索引而非列,那你之前用df["control_percent"]的写法错误,应该用df.loc["control_percent"]取整行数据,但这种情况要重新梳理业务逻辑——原代码是对列做判断,大概率是你搞混了行和列的概念。

步骤2:修正NaN判断错误

原代码里df["control_percent"] == NaN的写法无效,NaN和任何值比较都会返回False,必须用pd.isna()或np.isnan()判断空值。

修正后的示例代码(假设control_percent是列)

# 先确认列存在,提前拦截错误
assert 'control_percent' in df.columns, "DataFrame中不存在control_percent列"

# 正确判断空值并生成map_type
df["map_type"] = np.where(pd.isna(df["control_percent"]), "escort", "control")
# 对control类型的行设置空值
df.loc[df["map_type"] == "control", ["time_banked", "payload_distance"]] = np.NaN
# 转换时间格式并提取年份
df["round_start_time"] = pd.to_datetime(df["round_start_time"], format="%Y-%m-%d")
df["round_end_time"] = pd.to_datetime(df["round_end_time"], format="%Y-%m-%d")
df["year"] = df["round_start_time"].dt.year

如果control_percent是行索引

若需求是基于行索引为control_percent的行数据做判断,需明确业务逻辑后调整,示例:

# 确认行索引存在
assert 'control_percent' in df.index, "DataFrame中不存在control_percent行"

# 提取该行的目标列值
target_value = df.loc["control_percent", "目标列名"]
# 后续根据实际需求编写判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:30