解决Pandas SettingWithCopyWarning:同DataFrame内修改指定索引列值报错
解决Pandas SettingWithCopyWarning问题
出现这个警告的核心原因是**链式索引(先取列再用iloc定位行)**导致Pandas无法确定你修改的是原DataFrame的视图还是副本。df['A'].iloc[3]这种写法会先返回A列的临时对象,再修改这个对象,Pandas无法追踪该操作是否作用于原数据,因此抛出警告。
针对同DataFrame内修改单个元素的场景,推荐以下两种安全写法:
使用
.loc一次性定位行和列(Pandas官方推荐方式):df.loc[3, 'A'] = df.loc[3, 'B']如果仅修改单个元素,用
.at更高效(专门针对单个标量的快速访问):df.at[3, 'A'] = df.at[3, 'B']
补充说明:如果你的df本身是从另一个DataFrame切片得到的视图(比如df = big_df[big_df['C']>5]),即使采用上述写法仍可能触发警告,此时需要先将df转为独立副本:
df = df.copy()
之后再执行修改操作即可。
内容的提问来源于stack exchange,提问作者HuiM
相关产品推荐
相关产品推荐

