Pandas赋值DataFrame时出现SettingWithCopyWarning警告如何解决
Pandas SettingWithCopyWarning 解决方案
根因说明
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
该警告触发的核心原因是你操作的df_test_arima是从其他DataFrame对象中拆分出来的切片,Pandas无法确认该对象是原数据的视图还是独立副本,直接新增/修改列存在误改原数据的潜在风险,因此触发预警。
可行解决方法
方案1:生成
df_test_arima时显式声明为独立副本
如果你是通过取子集的方式生成df_test_arima,在生成代码末尾添加.copy()即可创建完全独立的DataFrame,后续赋值不会触发警告:# 原生成df_test_arima的代码后加.copy(),示例如下 df_test_arima = 原DataFrame[筛选条件].copy() # 之后正常赋值即可 df_test_arima['ACTUAL'] = y_test方案2:按警告提示使用
.loc语法赋值
不需要修改df_test_arima的生成逻辑,直接调整赋值语句即可:df_test_arima.loc[:, 'ACTUAL'] = y_test其中
:表示匹配全部行,显式指定行、列索引的赋值方式会被Pandas判定为合法操作,不会触发警告。
你拆分数据时设置了shuffle=False,y_test的索引和df_test_arima的索引完全对齐,该赋值操作不会出现数据错位问题。方案3:临时关闭警告(仅适合调试场景,不推荐常规使用)
如果你确认当前操作不会引发数据一致性问题,可以临时关闭该类警告:import pandas as pd # 关闭SettingWithCopyWarning警告 pd.set_option('mode.chained_assignment', None) # 此处执行赋值操作 df_test_arima['ACTUAL'] = y_test # 操作完成后可恢复默认警告设置 pd.set_option('mode.chained_assignment', 'warn')
内容的提问来源于stack exchange,提问作者Sevval Kahraman
相关产品推荐
相关产品推荐

