处理Pandas的SettingWithCopyWarning后新增列报KeyError问题求助
错误原因及解决方案
语法错误触发KeyError
DataFrame.loc的单参数默认匹配行索引,你写的a.loc['tier_diff'] = ...是尝试给行索引为tier_diff的行赋值,并未创建名为tier_diff的新列,因此后续筛选列时触发KeyError。
正确的新增列loc写法需要明确指定行、列两个维度,用冒号指代选中所有行:
a.loc[:, 'tier_diff'] = a['tier_rate'].diff()
SettingWithCopyWarning的根因与彻底解决
你最开始遇到的警告本质和列赋值写法无关,是变量a本身是其他DataFrame的切片对象,Pandas无法确定a是原数据的视图还是独立拷贝,直接修改列存在不同步到原数据的风险。
如果你不需要将a的修改同步到原DataFrame,只需要在生成a的时候显式执行深拷贝,即可从根源消除警告,无需强行使用loc写法:
# 生成a时显式拷贝,替换为你自己的切片逻辑即可 a = original_df[original_df['筛选列'] > 筛选阈值].copy() # 后续直接赋值不会触发警告 a['tier_diff'] = a['tier_rate'].diff() discontinuity = a.loc[a['tier_diff'] > 1]
内容的提问来源于stack exchange,提问作者HuLu ViCa
相关产品推荐
相关产品推荐

