Pandas添加sum列触发视图/副本警告,如何正确解决?
解决Pandas添加列时的副本赋值警告
问题根源
你操作的df并不是独立的原始DataFrame,而是另一个DataFrame的切片副本。哪怕对求和结果做了.copy(),只要df本身是副本,警告就会持续触发。
具体解决方法
方法1:创建
df时直接生成独立副本
如果你的df是通过切片原DataFrame得到的(比如df = original_df[['col1', 'col2']]),修改成:df = original_df[['col1', 'col2']].copy()之后再执行
df['sum'] = df.sum(axis=1)就不会有警告,因为此时df是完全独立的对象。方法2:用
.loc明确指定索引赋值
不需要修改df的创建方式,直接用.loc覆盖整行范围来赋值:df.loc[:, 'sum'] = df.sum(axis=1)这种方式明确告诉Pandas你要操作的是当前
df的所有行和新列,避免了副本赋值的歧义。方法3:直接操作原始DataFrame(如果适用)
如果你的df只是原DataFrame的子集,可直接在原DataFrame上添加列,再按需切片:original_df['sum'] = original_df[['col1', 'col2']].sum(axis=1) df = original_df[['col1', 'col2', 'sum']]
验证是否为副本
可以通过以下代码快速确认df是否是副本:
print(df._is_copy)
如果输出指向某个原DataFrame,就说明当前df是切片副本。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

