使用df['newcol']=1添加列报错,改用.loc仍报错求解决
问题原因及解决办法
这个警告的核心是:你当前操作的df本身就是另一个DataFrame切片后生成的视图/副本,不是独立的DataFrame对象,所以哪怕用.loc赋值,依然会触发这个提示。
不用.copy()的前提下,给你几个可行方案:
直接在原DataFrame上完成操作
如果你的df是从某个母DataFrame(比如original_df)切片得到的,比如df = original_df[original_df['age']>18],那不如跳过中间的df,直接在原DataFrame上用.loc定位目标行添加新列:original_df.loc[original_df['age']>18, 'newcol'] = 1这样完全不会涉及副本的问题,从根源避免警告。
用
.assign()方法生成新的DataFrame.assign()会返回一个添加了新列的新DataFrame对象,不会修改原对象,但可以重新赋值给df,这样也不会触发警告:df = df.assign(newcol=1)这个方法本质上是创建了新对象,但不用你显式写
.copy(),符合你的需求。临时屏蔽警告(不推荐)
如果你确认自己的操作不会引发数据不一致问题,可以临时关闭这个链式赋值警告:import pandas as pd pd.options.mode.chained_assignment = None但注意,这只是隐藏警告,没有解决副本的本质问题,后续操作可能还是会有潜在风险。
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

