为啥我在for循环中进行了一些更改后键的值没有改变

Posted

技术标签:

【中文标题】为啥我在for循环中进行了一些更改后键的值没有改变【英文标题】:Why the value of the key is not changed after I made some change in the for loop为什么我在for循环中进行了一些更改后键的值没有改变 【发布时间】:2020-07-08 19:57:24 【问题描述】:

我有一个字典变量 OutputFrames,我尝试用 ffill 和 bfill 方法 df.fillna(method = 'ffill').fillna(method='bill') 填充 NaN。当我在 for 循环中打印它时,它显示了正确的结果。但是当我使用该键检查字典时,它显示没有任何变化。 有人知道为什么吗?

我也试过

chartFrame.fillna(method='ffill', inplace = True).fillna(method='bfill', inlace = True)

因为键的值中有一列(SBT)没有填充,所以它也不起作用---AttributeError: 'NoneType' object has no attribute 'fillna'

从图中可以看出:

【问题讨论】:

请发布实际数据,而不是图片! 【参考方案1】:

当您在 for 循环中执行 chartFrame = chartFrame.fillna(method = 'ffill').fillna(method='bill') 时,您实际上并没有更改 OutputFrames 中的数据框。您只是将其分配给变量chartFrame。打印该变量会显示正确的结果,但不会存储。

在当前键处重新分配帧(首选):

OutputFrames[key] = chartFrame.fillna(method = 'ffill').fillna(method='bfill')

或者使用inplace=True而不链接操作。当您执行就地操作时,数据框会就地更改,并且不会返回任何内容。这基本上会导致None.nafill() 导致上述错误。

chartFrame.fillna(method='ffill', inplace = True)
chartFrame.fillna(method='bfill', inplace = True)

【讨论】:

超级有用且非常清晰的解释。谢谢!

以上是关于为啥我在for循环中进行了一些更改后键的值没有改变的主要内容,如果未能解决你的问题,请参考以下文章

为啥 datepicker 值没有改变?

在普通 for 循环中更改 QVector 的对象

ASP.Net 后台的Update语句执行成功了,为啥数据库的值没有改变

为啥我在 SharePoint WebPart 中的输入没有更改值?

为啥这个for循环不执行?

如何在不使用 for 循环的情况下从 appsettings 文件中读取对象数组中特定键的值