运行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
相关产品推荐
相关产品推荐

