Python-如何用pandasDataFrame中的先前值替换NaN?

发布于 2021-02-02 23:18:08

假设我有一个带有NaNs 的DataFrame :

>>> 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

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

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

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

关注者
0
被浏览
74
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你可以fillnaDataFrame上使用该方法,并将该方法指定为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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看