假设我有一个包含一些 s 的 DataFrame NaN:
NaN
>>> import pandas as pd >>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]]) >>> df 0 1 2 0 1 2 3 1 4 NaN NaN 2 NaN NaN 9
我需要做的是将 every 替换NaN为其上方同一列中的第一个非 值NaN。假设第一行永远不会包含NaN。因此,对于前面的示例,结果将是
0 1 2 0 1 2 3 1 4 2 3 2 4 2 9
我可以逐列、逐元素地循环遍历整个 DataFrame 并直接设置值,但是有没有一种简单的(最好是无循环)方法来实现这一点?
您可以fillna在 DataFrame 上使用该方法并将该方法指定为ffill(前向填充):
fillna
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方法的。
bfill
此方法不会就地修改 DataFrame - 您需要将返回的 DataFrame 重新绑定到变量,或者指定inplace=True:
inplace=True
df.fillna(method='ffill', inplace=True)