首页 > 解决方案 > 用下一次出现的非 np.nan 值的值填充 np.nan 值

问题描述

我试图弄清楚如何在特定条件下替换所有 nan 值。如果值是 nan,我希望将其替换为特定列表中右侧的日期。如果 nan 值右侧没有日期值,我想保持原样。

这是我的起始数据框。

mydf = [['2019-01-30', nan, nan, nan, '2020-03-09'],
        ['2018-11-29', nan, '2019-06-24', '2019-12-18', '2020-02-11'],
        [nan, nan, '2020-02-25', nan, nan]]

我希望这最终看起来像这样。

mydf = [['2019-01-30', '2020-03-09', '2020-03-09', '2020-03-09', '2020-03-09'],
        ['2018-11-29', '2019-06-24', '2019-06-24', '2019-12-18', '2020-02-11'],
        ['2020-02-25', '2020-02-25', '2020-02-25', nan, nan]]

这是我目前的尝试:

for i in range(0,len(mydf)):
    for j, k in enumerate(mydf[i]):
        if k is np.nan:
            mydf[i][j] = mydf[i][j+1]

mydf

但我收到一个错误。一旦列表中的剩余值全部为 nan,我似乎无法弄清楚如何在每个列表中停止循环。

IndexError                                Traceback (most recent call last)
<ipython-input-247-3f0a1ce84ea0> in <module>
      2     for j, k in enumerate(mydf[i]):
      3         if k is np.nan:
----> 4             mydf[i][j] = mydf[i][j+1]
      5 
      6 mydf

IndexError: list index out of range

mydf
    [['2020-02-25', '2020-02-25', '2020-02-25', nan, nan],
     ['2018-11-29', nan, '2019-06-24', '2019-12-18', '2020-02-11'],
     ['2019-01-30', nan, nan, nan, '2020-03-09']]

标签: pythonpandas

解决方案


您可以根据需要进行操作。

mydf.fillna(method='ffill') 
mydf.fillna(method='bfill')

这里不需要循环。


推荐阅读