复制DataFrame中'value'开头列触发SettingWithCopyWarning的疑问
消除SettingWithCopyWarning警告的方案
先确认dfc是独立的DataFrame
如果dfc是从其他DataFrame切片生成的(比如dfc = some_df[['col1']]),它其实是原DataFrame的视图而非独立副本,这种情况下赋值就会触发警告。先把它转成独立副本:
dfc = dfc.copy()
用批量赋值替代循环(更高效)
没必要逐列循环复制,直接一次性筛选目标列赋值,既能解决警告还能提升代码效率:
# 生成要复制的列名列表 target_cols = [f'value_{str(asset)}' for asset in assets] # 批量复制列到dfc dfc[target_cols] = df[target_cols].copy()
非要保留循环的话(不推荐)
如果坚持用循环逻辑,要确保赋值的是数据副本而非引用:
for asset in assets: col_name = f'value_{str(asset)}' dfc.loc[:, col_name] = df[col_name].copy()
警告原因说明
SettingWithCopyWarning的核心问题是你可能在操作DataFrame的视图,而非真正独立的DataFrame对象。上面的方法要么把视图转成独立副本,要么明确复制数据,确保操作的是独立对象,自然就不会触发警告了。
内容的提问来源于stack exchange,提问作者Edu Pvicente
相关产品推荐
相关产品推荐

