小能豆

如何用 pandas DataFrame 中的前一个或下一个值替换 NaN?

javascript

假设我有一个包含一些 s 的 DataFrame NaN

>>> import pandas as pd
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df
    0   1   2
0   1   2   3
1   4 NaN NaN
2 NaN NaN   9

我需要做的是将 every 替换NaN为其上方同一列中的第一个非 值NaN。假设第一行永远不会包含NaN。因此,对于前面的示例,结果将是

   0  1  2
0  1  2  3
1  4  2  3
2  4  2  9

我可以逐列、逐元素地循环遍历整个 DataFrame 并直接设置值,但是有没有一种简单的(最好是无循环)方法来实现这一点?


阅读 32

收藏
2024-07-02

共1个答案

小能豆

您可以fillna在 DataFrame 上使用该方法并将该方法指定为ffill(前向填充):

>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df.fillna(method='ffill')
   0  1  2
0  1  2  3
1  4  2  3
2  4  2  9

此方法…

将最后一个有效观察结果传播到下一个有效观察结果

反过来说,也是有bfill方法的。

此方法不会就地修改 DataFrame - 您需要将返回的 DataFrame 重新绑定到变量,或者指定inplace=True

df.fillna(method='ffill', inplace=True)
2024-07-02