gpt4 book ai didi

python - Pandas 中的 SettingWithCopyWarning

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:33 27 4
gpt4 key购买 nike

我有一个数据框,如下所示:

df = 
index P01 unten oben RV R2_simu
2014-05-23 03:00:00 0.0 0.0 0.9 0.8 0
2014-05-23 06:00:00 0.5 0.7 1.4 0.1 0
2014-05-23 07:00:00 1.0 2.4 2.4 0.6 0
2014-05-23 08:00:00 0.55 15.7 28.0 0.3 0
....

然后我尝试循环:

for i in range(0, len(df)):

if df.P01[i] >= df.RV[i]:
df.R2_simu[i] = 0

elif df.P01[i] < df.RV[i]:
df.R2_simu[i] = df.RV[i]
else:
pass

我希望收到如下所示的新数据框,

df = 
index P01 unten oben RV R2_simu
2014-05-23 03:00:00 0.0 0.0 0.9 0.8 0.8
2014-05-23 06:00:00 0.5 0.7 1.4 0.1 0
2014-05-23 07:00:00 1.0 2.4 2.4 0.6 0
2014-05-23 08:00:00 0.55 15.7 28.0 0.6 0.6

但是,我收到消息SettingWithCopyWarning,我尝试重写

 df.R2_simu[i] = df.RV[i]

 df.R2_simu[i] = df.RV[i].copy()

但是问题好像还是存在。

有人知道怎么处理吗?提前致谢!

最佳答案

尝试使用 loc 设置数据框上的值索引,这可能是在内部创建并写入 df 副本的原因。将循环更改为

for i in range(0, len(df)):

if df.P01[i] >= df.RV[i]:
df.loc[i,"R2_simu"] = 0

elif df.P01[i] < df.RV[i]:
df.loc[i,"R2_simu"] = df.RV[i]
else:
pass

更好的是你不使用循环,而是使用向量访问:

df.loc[df.loc[:,"P01"] >= df.loc[:,"RV"],"R2_simu"] = 0
df.loc[df.loc[:,"P01"] < df.loc[:,"RV"],"R2_simu"] = df.loc[df.loc[:,"P01"] < df.loc[:,"RV"],"RV"]

由内而外的解释

df.loc[:, "col"] => 获取每一行 : 和列 col

df.loc[x1 >= x2, "R2_simu"]=> 只考虑 x1 >= x2 的行和 R2_simu 的列>

关于python - Pandas 中的 SettingWithCopyWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50730073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com