问题描述
你可以fillna
在DataFrame
上使用该方法,并将该方法指定为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)
解决方法
假设我有一个带有NaNs
的DataFrame :
>>> import pandas as pd
>>> df = pd.DataFrame([[1,2,3],[4,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的逐列,逐元素并直接设置值,但是是否有一种简单的方法(最佳无循环方法)来实现这一点?