假设我有一个 DataFrame,其中包含一些NaN
s:
>>> 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 并直接设置值,但是有没有一种简单的(最好是无循环的)方法来实现这一点?
你可以使用fillnaDataFrame 上的方法并将该方法指定为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
method.
此方法不会就地修改 DataFrame - 您需要将返回的 DataFrame 重新绑定到变量或指定inplace=True
:
df.fillna(method='ffill', inplace=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)