Python 更改数据帧中的特定单元格-复制错误

Python 更改数据帧中的特定单元格-复制错误,python,pandas,dataframe,Python,Pandas,Dataframe,我手头有一个数据帧。在做出预测之后,我想用这些值更新数据帧。我知道在这个网站上也有类似的问题和答案。我都试过了。但我没能成功。它给出警告“试图在数据帧切片的副本上设置值”。并且不实际更新原始数据帧 根据与我的问题类似的问题,我尝试使用iloc、loc、iat等更改代码。没有任何效果 我的代码使用过滤器从pred_集合中获取一个子数据帧,然后按顺序按行进行预测。上一行的预测必须更新下一行的单元格。所以,我用移动的月份来预测未来 用于输入列表(mi.unique_everseen(pred_set[

我手头有一个数据帧。在做出预测之后,我想用这些值更新数据帧。我知道在这个网站上也有类似的问题和答案。我都试过了。但我没能成功。它给出警告“试图在数据帧切片的副本上设置值”。并且不实际更新原始数据帧

根据与我的问题类似的问题,我尝试使用
iloc
loc
iat
等更改代码。没有任何效果

我的代码使用过滤器从pred_集合中获取一个子数据帧,然后按顺序按行进行预测。上一行的预测必须更新下一行的单元格。所以,我用移动的月份来预测未来

用于输入列表(mi.unique_everseen(pred_set['from']+pred_set['to']):
对于范围内的i(0个月):
pred=pred_集[(pred_集['from']+pred_集['to'])==key].iloc[[i],:]
预测值=所有管道最终预测值(预测值)
对于范围内的j(i+1,个月):
pred_set.loc[(pred_set['from']+pred_set['to'])==key,:].iloc[j,pred_set.columns.get_loc(str('M-'+str(j))]=pred_val[0]
#变量2#pred_set[(pred_set['from']+pred_set['to'])==key].iloc[j,pred_set.columns.get_loc(str('M-'+str(j))]=pred_val[0]
#变体3#pred_集[(pred_集['从']+pred_集['到'])==key].iloc[[j],[pred_集.columns.get_loc(str('M-'+str(j))]=pred_val[0]
如前所述,此代码部分和变体不会更新单元格。看起来,我正在处理dataframe的副本,而不是原始的。我想知道这是什么原因

最后,我改变了结构并添加了:

pred_subset=pred_set[(pred_set['from']+pred_set['to'])==key]

我在这个新的数据框上记录了计算结果,它成功了。我不知道原因。

当您在数据帧的切片副本上尝试设置值时。,这意味着您正在处理副本,因此这意味着您所更改的内容也将影响“源数据”

这通常是一个很好的警告,可以通过使用
df=df.copy()
解决。。。如果您确实不想复制,请将
pd.options.mode.chained_赋值
设置为
None
(显然,在出现问题的块之后恢复)

现在,在你的例子中,我怀疑是
pred_set.loc[(pred_set['from']+pred_set['to'])==key,:].iloc[…]
造成的。风险似乎已得到控制,因此您可以在该块中禁用该警告

下面是一个例子:

将熊猫作为pd导入
导入seaborn作为sns
进口警告
iris=sns.load\u数据集(“iris”)
irisSub=虹膜头部(3)
irisSub.species='Spam'#将发出警告
打印(虹膜)#虹膜前3行受到影响
旧的\u ca=pd.options.mode.chained\u分配
pd.options.mode.chained_赋值=无
irisSub.species=‘蛋’不会发出警告
pd.options.mode.chained_assignment=old_ca#restore
打印(虹膜)
另见