Pandas对比已有列生成新列触发SettingWithCopyWarning如何解决
pandas SettingWithCopyWarning 问题解决方法
警告原因
该警告触发的核心原因是当前使用的occ_2019_pe不是独立的DataFrame对象,而是从其他DataFrame通过切片、筛选操作得到的视图/副本,pandas无法确认你是否希望修改原DataFrame,因此弹出风险提示。
解决方法
方法1:创建独立DataFrame副本
在生成occ_2019_pe的筛选步骤末尾添加.copy(),明确将其声明为独立对象,后续修改不会触发警告,示例:# 若你之前通过筛选其他DataFrame得到occ_2019_pe,在末尾添加.copy()即可 occ_2019_pe = original_df[original_df['筛选条件'] == '目标值'].copy() # 之后执行原有赋值代码即可 occ_2019_pe['occ_change'] = np.where(occ_2019_pe['occ10']==occ_2019_pe['occ10_t1'], 0, 1)方法2:使用
.loc显式赋值
按照提示的规范写法,用.loc明确指定行、列索引进行赋值:occ_2019_pe.loc[:, 'occ_change'] = np.where(occ_2019_pe['occ10']==occ_2019_pe['occ10_t1'], 0, 1)方法3:简化列生成逻辑
不需要调用np.where也可以实现相同逻辑,直接将布尔判断结果转为整数即可,代码更简洁:occ_2019_pe['occ_change'] = (occ_2019_pe['occ10'] != occ_2019_pe['occ10_t1']).astype('int')
内容的提问来源于stack exchange,提问作者DAEHYUN KIM
相关产品推荐
相关产品推荐

