假设我有一个带有一些 NaN
s 的 DataFrame:
>>> 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
(前向填充):
>>> 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
这个方法……
propagate[s] last valid observation forward to next valid
相反,还有一个 bfill
方法。
此方法不会就地修改 DataFrame - 您需要将返回的 DataFrame 重新绑定(bind)到变量或指定 inplace=True
:
df.fillna(method='ffill', inplace=True)
关于python - 如何用 pandas DataFrame 中的前一个或下一个值替换 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905295/