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

