假设我有一个带有NaNs 的DataFrame :
NaNs
>>> 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
我需要做的是用上方的同一列中NaN的第一个非NaN值替换每个值。假设第一行永远不会包含NaN。因此,对于前面的示例,结果将是
0 1 2 0 1 2 3 1 4 2 3 2 4 2 9
我可以遍历整个DataFrame的逐列,逐元素并直接设置值,但是是否有一种简单的方法(最佳无循环方法)来实现这一点?
你可以fillna在DataFrame上使用该方法,并将该方法指定为ffill(正向填充):
fillna
DataFrame
>>> 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)