python - 如何用 pandas DataFrame 中的前一个或下一个值替换 NaN?

标签 python python-3.x pandas dataframe nan

假设我有一个带有一些 NaNs 的 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/

相关文章:

python - 如何在 axis=1 内连接张量?

python - 由于代理问题,无法 pip install spacy [model]

python - pyparsing部分匹配或递归限制命中

python - 如何在 pandas 数据框中使用 bool 索引来表示子字符串关系?

python - 从 CMake 运行 pytest 测试,其中测试和源位于不同的文件夹中

python - 如何使用 Pandas DataFrame 有效地映射值(来自 CSV 文件)?

python-3.x - 多线程爬虫运行一段时间后越来越慢

python - 将 sklearn 函数应用于 pandas 数据帧给出 ValueError ("Unknown label type: %r"% y)

python - 使用 Pandas 按用户名选择行

Python tkinter TreeView 列大小