为何设置DataFrame列时出现“在切片副本上赋值”警告?
解决Pandas的SettingWithCopyWarning问题
你遇到的这个警告,核心原因不是左值df["next"]的问题,而是你的df本身可能是另一个DataFrame的切片视图(而非独立副本)。
Pandas在处理DataFrame切片时,有时候无法确定返回的是原始数据的视图还是副本。如果df是通过类似df = original_df[original_df['some_col'] > 10]或者链式索引(比如df = original_df[...][...])得到的,那么df可能只是原始DataFrame的一个引用视图。这时候你对df["next"]赋值,Pandas无法判断你是想修改原始DataFrame还是这个切片副本,因此抛出警告。
解决方法:
方法一:提前创建独立副本
如果df是从其他DataFrame切片而来,创建时直接加.copy(),让它成为独立的DataFrame:df = original_df[original_df['some_col'] > 10].copy()之后再执行赋值操作就不会触发警告了。
方法二:用
.loc明确指定赋值范围
不管df是不是视图,用.loc明确告诉Pandas你要修改的是当前df的指定列,消除歧义:df.loc[:, "next"] = df["next"] * df["curr"].map(lookup)方法三:避免链式索引
不要用类似df = original_df[col1 > x][col2 == y]这种链式操作,改用单步的.loc索引:df = original_df.loc[(original_df['col1'] > x) & (original_df['col2'] == y), :]
验证df是否为视图
可以通过以下属性查看df是否是某个DataFrame的副本/视图:
print(df._is_copy) # 如果输出<weakref at 0x...; to 'DataFrame' at 0x...>,说明是视图
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

