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
相关产品推荐
相关产品推荐

