提问人: 提问时间:3/2/2023 更新时间:3/2/2023 访问量:52
使用 .loc 不会使 SettingWithCopyWarning 在 pandas 中消失
Using .loc doesn't make SettingWithCopyWarning disappear in pandas
问:
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]))
上面的代码(使用此数据集)代码给了我
/usr/local/lib/python3.8/dist-packages/pandas/core/indexing.py:1773:设置与复制警告: 尝试在 DataFrame 中的切片副本上设置值。 尝试改用 .loc[row_indexer,col_indexer] = value
我尝试使用代替,但这没有帮助。那么我怎样才能摆脱这个警告呢?cars_new.loc[:,item]
cars_new[item]
答:
1赞
Marcelo Paco
3/2/2023
#1
您遇到的问题是,您正在创建数据帧的浅拷贝并将其设置为 .此问题有两种可能的解决方案:cars
cars_new
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]))
默认情况下,使用复制功能会创建数据帧的深层副本。另一种方法是删除变量:cars_new
import pandas as pd
cars = pd.read_csv('car_sales.csv')
cars = cars.dropna()
for item in ['mileage', 'engine', 'max_power']:
cars [item] = cars [item].apply(lambda text: float(text.split()[0]))
评论
0赞
user19077881
3/3/2023
你是对的!我已经删除了我的评论并为您的答案投了赞成票。
评论
cars_new[item].str.split().str[0].astype(float)