[英]Fill in np.nan values with the value of the next occurrance of non np.nan value
我试图弄清楚如何在特定条件下替换所有 nan 值。 如果值是 nan,我希望将其替换为特定列表中右侧的日期。 如果 nan 值右侧没有日期值,我想保持原样。
这是我的起始 dataframe。
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']]
您可以根据需要进行操作。
mydf.fillna(method='ffill')
mydf.fillna(method='bfill')
这里不需要循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.