You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中使用.loc仍无法消除SettingWithCopyWarning警告怎么办?

解决Pandas SettingWithCopyWarning警告问题

这段代码:

import pandas as pd
cars = pd.read_csv('car_sales.csv')
cars_new = cars.dropna()
for item in ['mileage', 'engine', 'max_power']:
  cars_new[item] = cars_new[item].apply(lambda text: float(text.split()[0]))

触发了SettingWithCopyWarning,哪怕改成cars_new.loc[:,item]也没用,问题出在**cars.dropna()返回的是原DataFrame的视图,而非独立副本**。Pandas无法确定你是想修改原数据还是副本,所以抛出警告。

解决方法:

  • 显式创建副本:在dropna()后加上.copy(),让cars_new成为完全独立的DataFrame,后续修改就不会触发警告。修改后的代码如下:
import pandas as pd
cars = pd.read_csv('car_sales.csv')
# 显式创建副本
cars_new = cars.dropna().copy()
for item in ['mileage', 'engine', 'max_power']:
  cars_new[item] = cars_new[item].apply(lambda text: float(text.split()[0]))
  • 如果你想用.loc确保操作安全,也可以结合副本使用,不过只要创建了独立副本,直接赋值也不会触发警告。

原理:当你对DataFrame做切片、过滤(比如dropna)时,Pandas默认可能返回视图(共享原数据内存),显式调用.copy()会生成新的内存块,让cars_new和原cars完全分离,Pandas就不会再警告你修改的是切片副本了。

内容的提问来源于stack exchange,提问作者user21222252

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:22:47