Python 用下一次出现的非np.nan值的值填写np.nan值

Python 用下一次出现的非np.nan值的值填写np.nan值,python,pandas,Python,Pandas,我试图找出如何在特定条件下替换所有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]

我试图找出如何在特定条件下替换所有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']]
索引器错误回溯(最近一次调用)
在里面
2对于枚举中的j,k(mydf[i]):
3如果k是np.nan:
---->4 mydf[i][j]=mydf[i][j+1]
5.
6多年筹资框架
索引器:列表索引超出范围
mydf
[2020-02-25',2020-02-25',2020-02-25',南,南],
[2018-11-29',nan',2019-06-24',2019-12-18',2020-02-11'],
['2019-01-30',楠,楠,楠,'2020-03-09']
您可以根据需要执行操作

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

无需在此循环。

如果没有“右侧”,如何填充最后一列?您需要
df.bfill(axis=1)
我认为OP需要“bfill”方法。我还认为axis应该被设置,这非常有帮助。通过使用mydf.fillna(method='bfill'),我能够获得我想要的数据帧。我转置了我原来的数据帧并应用了该方法,然后又将其转置回来。正如我在评论中所说的,您只需要
mydf.bfill(axis=1)
@asiu321就更好了,这使它变得容易多了。再次感谢你的帮助。