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

Python基于DataFrame其他列新建列时出现KeyError问题问询

报错原因

KeyError: 'degree'出现的原因是你没有提前在DataFrame中创建degree列,就直接对该列的行位置赋值,pandas找不到对应列自然抛出键错误。另外你采用的逐行遍历索引的写法效率极低,不适合处理规模稍大的数据集,pandas有原生矢量化方法可以一行实现你的需求。

正确实现方式

直接用fillna方法即可完全匹配你的赋值逻辑:优先取model_degree的值,为空则用section_degree填充,两列都为空则保留空值,代码如下:

import pandas as pd

basicdataframe['degree'] = basicdataframe['model_degree'].fillna(basicdataframe['section_degree'])

补充说明

如果你坚持要使用循环写法(非常不推荐,容易触发SettingWithCopyWarning且运行效率远低于矢量化方法),需要先初始化degree列再赋值,修改后的代码如下:

# 先初始化degree列
basicdataframe['degree'] = pd.NA
for i in basicdataframe.index:
    if pd.isnull(basicdataframe['section_degree'][i]) and pd.isnull(basicdataframe['model_degree'][i]):
        basicdataframe.loc[i, 'degree'] = basicdataframe['model_degree'][i]
    elif pd.notnull(basicdataframe['section_degree'][i]) and pd.isnull(basicdataframe['model_degree'][i]):
        basicdataframe.loc[i, 'degree'] = basicdataframe['section_degree'][i]
    elif pd.isnull(basicdataframe['section_degree'][i]) and pd.notnull(basicdataframe['model_degree'][i]):
        basicdataframe.loc[i, 'degree'] = basicdataframe['model_degree'][i]
    elif pd.notnull(basicdataframe['section_degree'][i]) and pd.notnull(basicdataframe['model_degree'][i]):
        basicdataframe.loc[i, 'degree'] = basicdataframe['model_degree'][i]

注意这里改用了loc索引赋值,避免链式索引的警告问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:01