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

2023-11-24

假设我有一个 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 并直接设置值,但是有没有一种简单的(最好是无循环的)方法来实现这一点?


你可以使用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(使用前将#替换为@)

如何用 pandas DataFrame 中的前一个或下一个值替换 NaN? 的相关文章

随机推荐

  • 在 Hadoop Streaming 中生成单独的输出文件

    仅使用映射器 Python 脚本 而不使用化简器 如何为每一行输出输出一个以键作为文件名的单独文件 而不是输出长文件 输入和输出格式类可以通过使用 inputformat 和 outputformat 命令行参数来替换 如何执行此操作的一个
  • 如何读取 .obj 文件?

    在 Visual Studio 中 编译 C 文件后会生成目标文件 obj 如何阅读和理解它 还有如何在 Visual studio 2015 中查看编译器优化后的代码 如果已回答 请重定向 Use the DUMPBINVisual St
  • 为什么使用除 VARCHAR2(4000) 以外的其他方法在 Oracle 数据库中存储字符串?

    I found 询问汤姆文章解释一下Oracle中CHAR和VARCHAR2没有太大区别 它给人的印象是 我应该对要存储字符串的每一列使用 VARCHAR2 4000 BYTE 即使对于 ISO 639 1 语言代码也是如此 因为它没有任何
  • 用 ruby​​ 发送 POST ?

    有什么好的库可以在 ruby 中发送 POST 标头吗 你可以做这样的事情 require net http postData Net HTTP post form URI parse http thewebsite net postKey
  • malloc 和 HeapAlloc 之间有根本区别吗(除了可移植性之外)? [复制]

    这个问题在这里已经有答案了 由于各种原因 我正在尝试将代码从 C 运行时移植到使用 Windows 堆 API 的代码 我遇到了一个问题 如果我重定向malloc calloc realloc free打电话给HeapAlloc HeapR
  • Nougat 上的 android.os.TransactionTooLargeException

    我将 Nexus 5X 更新为 Android N 现在当我在其上安装应用程序 调试或发布 时 我会在每个包含附加捆绑包的屏幕转换上收到 TransactionTooLargeException 该应用程序适用于所有其他设备 PlaySto
  • Android调用onClick方法而不点击

    我想使用现有的 onClick 方法来使我的程序更简单 它由 onClick 方法和其他方法组成 Override public void onClick View v switch v getId case R id button1 br
  • 要在 Scala 中映射的案例类

    有没有好的方法可以转换 Scalacase class实例 例如 case class MyClass param1 String param2 String val x MyClass hello world 成某种映射 例如 getCC
  • 无法将 null 分配给隐式类型变量

    根据 Visual Studio 的说法 这是不行的 var foo null 但这没关系 var foo false double null null 为什么 是个 double null也影响到null在 else 分支中 隐式类型变量
  • x86-64 REX 前缀中的“REX”代表什么?

    From 英特尔的SDM 第 2 2 1 节指定 REX 前缀用于 指定 GPR 和 SSE 寄存器 指定 64 位操作数大小 指定扩展控制寄存器 但缩写词中的字母 REX 代表什么 这个2002年热门薯条演示AMD 扩展了幻灯片 10 上
  • Structuremap 是否支持开箱即用的 Lazy?

    结构图是否允许您以惰性方式进行构造函数注入 意思是在使用之前不创建注入的对象 UPDATE StructureMap v3 开箱即用地实现了这一点 因此不再需要这个技巧 StructureMap 版本 2 没有 但通过一些技巧 您可以让它完
  • Square 和 Rectangle 继承有什么问题?

    我读过一些关于将 Square 作为 Rectangle 类的继承类是一种不好的做法的文章 说它违反了 LSP 里氏替换原则 我还是不明白 我用Ruby做了一个示例代码 class Rectangle attr accessor width
  • Delphi 自动 Format Source 损坏匿名程序

    昨天我发现了 Delphi 中的 Format Source 功能 它节省了我很多时间 然而 我发现它破坏了匿名过程的布局 有没有什么设置可以改善这个结果 例如 如果我有以下代码 procedure TServerThread cbUpda
  • C/C++ 中的 asc 和 chr 等效项

    好吧 标题几乎概括了这一点 我想在 C 中使用类似 asc 0 的东西 并且想让程序平台独立 所以不想使用 48 任何帮助表示赞赏 您可以简单地使用单引号来使字符常量 char c a 字符类型is数字类型 所以没有真正的需要asc and
  • 在一个套接字上订阅多个多播组(Linux、C)

    是否可以在单个套接字上从多个多播组接收数据 例如 void AddGroup int sock const char mc addr str int mc port const char interface struct sockaddr
  • Ninject 使用 WCF Web API Preview 5

    有人能为我指出正确的方向 让 Ninject 与 WCF Web API Preview 5 一起使用吗 我已在我的 ASP NET MVC 3 项目以及使用 Ninject Extensions Wcf 库的另一个内部 WCF 服务中成功
  • 如何在 IE 中使用 javascript 从客户端获取文件大小?

    我使用了以下方法 HTML
  • Android,Glide 显示错误图像约一秒

    我正在使用 Glide 库从 URL 加载图像 这是我从 Graph Request Facebook 获得的 它用在 RecyclerAdapter 中 当我滚动时 每个 ImageView 显示错误的图片大约不到一秒 然后纠正一张 这是
  • 如何设置 DT_RPATH 或 DT_RUNPATH?

    在 Linux 上 ld so 8 手册页讨论了动态库的搜索顺序 它说DT RPATH已被弃用 并且还提到DT RUNPATH 没有提到 rpath链接器选项 The ld 1 手册页提到了 rpath and rpath link选项 但
  • 如何用 pandas DataFrame 中的前一个或下一个值替换 NaN?

    假设我有一个 DataFrame 其中包含一些NaNs gt gt gt import pandas as pd gt gt gt df pd DataFrame 1 2 3 4 None None None None 9 gt gt gt