Python 用下一次出现的非np.nan值的值填写np.nan值
我试图找出如何在特定条件下替换所有nan值。如果某个值为nan,我希望将其替换为其特定列表中右侧的日期。如果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]
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就更好了,这使它变得容易多了。再次感谢你的帮助。