我怎样才能修复这个警告SettingWithCopyWarning?



谁能帮我修复这个警告,每当我输入这个代码?

rh_can = df1.loc[(df1["hotel"] == "Resort Hotel") & (df1["is_canceled"] == 0)]
ch_can = df1.loc[(df1["hotel"] == "City Hotel") & (df1["is_canceled"] == 0)]
rh_can['adr_pp'] = rh_can['adr'] / (rh_can['adults'] + rh_can['children'])
ch_can["adr_pp"] = ch_can["adr"] / (ch_can["adults"] + ch_can["children"])
Warning Message:
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:5: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

如果使用df.loc函数时,它返回一个指向与条件对应的数据的视图。如果返回的实例,则源数据框也将被更新。

发生此错误是为了防止对源数据进行意外修改。该错误告诉您使用源实例的索引而不是视图实例的索引来更新值。

你应该使用复制函数如果不想更新源数据框架,可以创建一个新的数据框架。
rh_can = df1.loc[(df1["hotel"] == "Resort Hotel") & (df1["is_canceled"] == 0)].copy()
ch_can = df1.loc[(df1["hotel"] == "City Hotel") & (df1["is_canceled"] == 0)].copy()
rh_can['adr_pp'] = rh_can['adr'] / (rh_can['adults'] + rh_can['children'])
ch_can["adr_pp"] = ch_can["adr"] / (ch_can["adults"] + ch_can["children"])

最新更新