Pandas中顽固的“视图vs副本”警告问题排查求助
解决Pandas SettingWithCopyWarning问题
问题根源
你遇到的警告本质是raw_df本身可能是另一个DataFrame的视图(而非独立副本),哪怕你给右侧结果加了.copy(),左侧赋值的对象依然是视图,导致Pandas无法确定你是要修改原数据还是视图,从而抛出警告。
验证方法
先确认raw_df是否为视图:
print(raw_df._is_view)
如果输出True,说明它确实是视图。
解决步骤
方法1:先将raw_df转为独立副本
先把raw_df变成完全独立的DataFrame,再执行赋值操作:
# 先转副本 raw_df = raw_df.copy() # 再赋值,右侧无需.loc[:,:],直接用raw_df即可 raw_df.loc[:, 'full_size'] = raw_df.apply(full_size, axis="columns")
方法2:用assign生成新DataFrame
如果不想修改原raw_df,可以用assign方法直接返回带新列的新DataFrame,彻底规避视图问题:
raw_df = raw_df.assign(full_size=raw_df.apply(full_size, axis="columns"))
方法3:从根源避免视图生成
如果raw_df是通过切片其他DataFrame得到的(比如raw_df = big_df[big_df['status'] == 1]),生成时直接加.copy():
raw_df = big_df.loc[big_df['status'] == 1, :].copy()
内容的提问来源于stack exchange,提问作者user3556757
相关产品推荐
相关产品推荐

