Pandas/NumPy 中处理包含 NaN 值的逻辑与运算

pandas/numpy 中处理包含 nan 值的逻辑与运算

在 Pandas 或 NumPy 中进行逻辑与运算时,如果数据包含 NaN 值,默认行为可能不符合预期。本文将探讨如何自定义逻辑与运算的行为,使其满足以下条件:

True & NaN == TrueFalse & False == FalseNaN & NaN == NaN

我们将介绍两种实现方法,并分析它们在不同数据分布情况下的性能表现,以便选择最优方案。

方法一:使用 mask

mask 方法可以根据条件替换 DataFrame 或 Series 中的值。我们可以先对 DataFrame 进行 all(1) 操作,计算每一行的逻辑与结果(将 NaN 视为 True),然后使用 mask 方法将所有元素均为 NaN 的行替换为 NaN。

import pandas as pdfrom itertools import product# 创建包含 True, False 和 NaN 的 DataFramea = pd.DataFrame((product([True, False, None], [True, False, None])))print(a)# 使用 mask 方法实现自定义逻辑与result = a.all(1).mask(a.isna().all(1))print(result)

这段代码首先创建了一个包含 True, False 和 NaN 的 DataFrame a。然后,它使用 a.all(1) 计算每一行的逻辑与,将 NaN 视为 True。最后,它使用 mask(a.isna().all(1)) 将所有元素均为 NaN 的行替换为 NaN。

输出结果:

       0      10   True   True1   True  False2   True   None3  False   True4  False  False5  False   None6   None   True7   None  False8   None   None0     True1    False2     True3    False4    False5    False6     True7    False8      NaNdtype: bool

方法二:使用 stack 和 groupby

另一种方法是使用 stack 方法将 DataFrame 转换为 Series,然后使用 groupby 和 all 方法计算每一行的逻辑与。最后,使用 reindex 方法将结果重新索引为原始 DataFrame 的索引。

import pandas as pdfrom itertools import product# 创建包含 True, False 和 NaN 的 DataFramea = pd.DataFrame((product([True, False, None], [True, False, None])))print(a)# 使用 stack 和 groupby 方法实现自定义逻辑与result = a.stack().groupby(level=0).all().reindex(a.index)print(result)

这段代码首先创建了一个包含 True, False 和 NaN 的 DataFrame a。然后,它使用 a.stack() 将 DataFrame 转换为 Series,并丢弃 NaN 值。 接着,它使用 groupby(level=0).all() 对每一行进行逻辑与运算。 最后,它使用 reindex(a.index) 将结果的索引恢复为原始 DataFrame 的索引。

输出结果:

       0      10   True   True1   True  False2   True   None3  False   True4  False  False5  False   None6   None   True7   None  False8   None   None0     True1    False2     True3    False4    False5    False6     True7    False8      NaNdtype: bool

性能分析

两种方法的性能取决于数据中 NaN 值的分布情况。

大量 NaN 值: 当数据中包含大量 NaN 值时,stack 方法通常更有效率,因为它在计算之前会丢弃 NaN 值,从而减少计算量。少量 NaN 值: 当数据中只有少量 NaN 值时,mask 方法可能更有效率,因为它避免了 stack 和 groupby 操作的开销。

以下代码展示了在不同 NaN 值分布情况下的性能对比:

import pandas as pdfrom itertools import productimport timeit# 创建包含 True, False 和 NaN 的 DataFramea = pd.DataFrame((product([True, False, None], [True, False, None])))# 创建包含少量 NaN 值的 DataFrameb = a.sample(int(1e5), weights=[1, 1, 1, 1, 1, 1, 1, 1, 0.01], ignore_index=True, replace=True)print(f"b 中包含全 NaN 的行数: {b.isna().all(axis='columns').sum()}")# 创建包含大量 NaN 值的 DataFramec = a.sample(int(1e5), weights=[1, 1, 1, 1, 1, 1, 1, 1, 80], ignore_index=True, replace=True)print(f"c 中包含全 NaN 的行数: {c.isna().all(axis='columns').sum()}")# 性能测试print("少量 NaN 值:")print(f"  mask 方法: {timeit.timeit(lambda: b.all(1).mask(b.isna().all(1)), number=100):.3f} 秒")print(f"  stack 方法: {timeit.timeit(lambda: b.stack().groupby(level=0).all().reindex(b.index), number=100):.3f} 秒")print("大量 NaN 值:")print(f"  mask 方法: {timeit.timeit(lambda: c.all(1).mask(c.isna().all(1)), number=100):.3f} 秒")print(f"  stack 方法: {timeit.timeit(lambda: c.stack().groupby(level=0).all().reindex(c.index), number=100):.3f} 秒")

输出结果示例:

b 中包含全 NaN 的行数: 117c 中包含全 NaN 的行数: 88816少量 NaN 值:  mask 方法: 0.235 秒  stack 方法: 0.375 秒大量 NaN 值:  mask 方法: 0.178 秒  stack 方法: 0.091 秒

从结果可以看出,当数据中包含大量 NaN 值时,stack 方法的性能明显优于 mask 方法。

总结

本文介绍了两种在 Pandas/NumPy 中处理包含 NaN 值的逻辑与运算的方法。mask 方法适用于 NaN 值较少的情况,而 stack 方法更适合 NaN 值较多的情况。选择哪种方法取决于具体的数据分布情况。在实际应用中,建议根据数据的特点进行性能测试,选择最适合的解决方案。

以上就是Pandas/NumPy 中处理包含 NaN 值的逻辑与运算的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1364480.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何使用Python实现OCR识别?Tesseract配置
上一篇 2025年12月14日 04:02:06
Pandas/NumPy 中逻辑与运算处理 NaN 值的技巧
下一篇 2025年12月14日 04:02:26

相关推荐

  • Sublime如何设置一键编译运行_创建自己的快捷键绑定教程

    Sublime如何设置一键编译运行_创建自己的快捷键绑定教程Sublime如何设置一键编译运行_创建自己的快捷键绑定教程Sublime如何设置一键编译运行_创建自己的快捷键绑定教程Sublime如何设置一键编译运行_创建自己的快捷键绑定教程

    c++kquote>可通过创建自定义构建系统并绑定快捷键实现Sublime中一键编译运行。首先为Python等语言在Tools→Build System中新建JSON格式的构建配置,保存至User目录;然后在Key Bindings中添加如F5触发build命令的快捷键,支持通过context…

    2026年9月28日 • 用户投稿
    300
  • 教你解决win10 ISO原版系统进安全模式黑屏的问题

    教你解决win10 ISO原版系统进安全模式黑屏的问题教你解决win10 ISO原版系统进安全模式黑屏的问题教你解决win10 ISO原版系统进安全模式黑屏的问题教你解决win10 ISO原版系统进安全模式黑屏的问题

    win10 原版系统进入安全模式黑屏怎么办?win10 原版系统一直是众多用户青睐的操作系统,在本平台的win10 系统下载排行榜中,它始终名列前茅。有部分用户在使用 win10 原版系统时,遇到了进入安全模式后屏幕变黑的情况。那么该如何解决这一问题呢?本文将为你详细介绍如何处理 win10 原版系…

    2026年9月28日 • 用户投稿
    000
  • Claude可以解读脑部fMRI数据吗 Claude神经影像分析医学应用

    Claude可以解读脑部fMRI数据吗 Claude神经影像分析医学应用Claude可以解读脑部fMRI数据吗 Claude神经影像分析医学应用Claude可以解读脑部fMRI数据吗 Claude神经影像分析医学应用Claude可以解读脑部fMRI数据吗 Claude神经影像分析医学应用

    claude不能直接分析脑部fmri数据,1. 因为其设计用于文本处理而非图像分析;2. 医学影像需专业软件如fsl、spm或深度学习模型处理;3. claude可解释术语、梳理流程、推荐资源及辅助写代码;4. 在医学应用中ai模型专用于分类预测,而claude仅能作为助手;5. 研究人员可用其理清…

    2026年9月28日 • 用户投稿
    100
  • 快手小店如何优化商品视频 快手小店短视频带货的制作要点

    快手小店如何优化商品视频 快手小店短视频带货的制作要点快手小店如何优化商品视频 快手小店短视频带货的制作要点快手小店如何优化商品视频 快手小店短视频带货的制作要点快手小店如何优化商品视频 快手小店短视频带货的制作要点

    快手小店商品视频和短视频带货的核心是快速抓住用户注意力并建立信任,关键在于前3秒突出产品核心卖点,直接展示价格优势、功能亮点或痛点解决方案;2. 通过场景化展示让用户看到产品在真实生活中的应用,如衣服上身效果或厨具实操过程,增强代入感;3. 强调真实性和信任感,避免过度滤镜,采用普通人出镜、自然使用…

    2026年9月28日 • 用户投稿
    100
  • 今日头条客户端如何设置自动播放_今日头条客户端视频播放的调整技巧

    今日头条客户端如何设置自动播放_今日头条客户端视频播放的调整技巧今日头条客户端如何设置自动播放_今日头条客户端视频播放的调整技巧今日头条客户端如何设置自动播放_今日头条客户端视频播放的调整技巧今日头条客户端如何设置自动播放_今日头条客户端视频播放的调整技巧

    如果您在浏览今日头条客户端时,希望视频内容能够自动播放以提升浏览效率,或者相反,希望关闭自动播放以节省流量,可以通过以下方法进行设置。以下是具体的操作步骤: 一、开启或关闭首页视频自动播放 此设置用于控制在刷新信息流时,视频是否在进入视野后自动开始播放。关闭此功能可有效节省移动数据流量。 1、打开今…

    2026年9月28日 • 用户投稿
    200
  • 艰难依旧坚持! Turn 10称《极限竞速》系列还没死

    艰难依旧坚持! Turn 10称《极限竞速》系列还没死艰难依旧坚持! Turn 10称《极限竞速》系列还没死艰难依旧坚持! Turn 10称《极限竞速》系列还没死艰难依旧坚持! Turn 10称《极限竞速》系列还没死

    在微软进行大规模裁员后,像turn 10这样受到严重影响的工作室一度陷入沉寂。这种沉默引发了外界的诸多猜测,甚至有玩家认为《极限竞速》系列即将彻底终结。然而,近日turn 10与playground games在社交媒体上联手发声,向广大粉丝传递了一个明确的信息:《极限竞速》系列并未消亡,未来仍将持…

    2026年9月28日 • 用户投稿
    000
  • 如何在Linux系统中执行.sh文件?

    如何在Linux系统中执行.sh文件?如何在Linux系统中执行.sh文件?如何在Linux系统中执行.sh文件?如何在Linux系统中执行.sh文件?

    如何在Linux系统中执行.sh文件? 在Linux系统中,.sh文件是一种被称为Shell脚本的文件,用于执行一系列的命令。执行.sh文件是非常常见的操作,本文将介绍如何在Linux系统中执行.sh文件,并提供具体的代码示例。 方法一:使用绝对路径执行.sh文件 要在Linux系统中执行一个.sh…

    2026年9月28日 • 用户投稿
    000
  • 如何使用电脑录制视频(简便实用的视频录制方法及技巧)

    如何使用电脑录制视频(简便实用的视频录制方法及技巧)如何使用电脑录制视频(简便实用的视频录制方法及技巧)如何使用电脑录制视频(简便实用的视频录制方法及技巧)如何使用电脑录制视频(简便实用的视频录制方法及技巧)

    随着社交媒体的兴起和网络直播的普及,越来越多的人开始使用电脑录制视频来分享自己的生活、技能和知识。然而,对于一些新手来说,如何使用电脑录制视频却成为了一个难题。本文将介绍一些简便实用的视频录制方法和技巧,帮助读者快速上手。 一、选择适合的录制软件通过选择适合自己需求的录制软件,可以大大提高录制视频的…

    2026年9月28日 • 用户投稿
    000
  • 如何通过电源管理设置优化笔记本电脑的续航时间?

    如何通过电源管理设置优化笔记本电脑的续航时间?如何通过电源管理设置优化笔记本电脑的续航时间?如何通过电源管理设置优化笔记本电脑的续航时间?如何通过电源管理设置优化笔记本电脑的续航时间?

    电源管理设置是延长笔记本续航的关键,通过选择节能或平衡模式、降低屏幕亮度至50%-70%、关闭后台应用与无线功能,可显著减少耗电;即使电池健康度下降,合理配置仍能最大化剩余电量使用效率。 要让笔记本电脑的续航时间更长,核心在于精细化管理它的能量消耗,这主要通过调整电源管理设置来实现。简单来说,就是告…

    2026年9月28日 • 用户投稿
    100
  • OptaPlanner 过约束规划:理解与应用虚拟值策略

    OptaPlanner 过约束规划:理解与应用虚拟值策略OptaPlanner 过约束规划:理解与应用虚拟值策略OptaPlanner 过约束规划:理解与应用虚拟值策略OptaPlanner 过约束规划:理解与应用虚拟值策略

    本文深入探讨OptaPlanner在处理过约束规划场景时的两种核心策略:利用nullable=true和引入“虚拟值”。我们将详细解析这两种方法的工作原理、适用场景、配置方式及约束设计,旨在帮助开发者根据实际业务需求,高效地解决资源不足问题,实现最优或次优的规划结果。 OptaPlanner 过约束…

    2026年9月28日 • 用户投稿
    100
  • MySQL中买菜系统的商品规格表设计指南

    MySQL中买菜系统的商品规格表设计指南MySQL中买菜系统的商品规格表设计指南MySQL中买菜系统的商品规格表设计指南MySQL中买菜系统的商品规格表设计指南

    MySQL中买菜系统的商品规格表设计指南 在买菜系统中,商品规格表的设计十分重要,它用于记录商品的各种规格信息,例如重量、大小、颜色等等。一个良好设计的商品规格表能够使系统具备更强大的查询和筛选能力,提升系统的性能和用户体验。本文将为您提供一些指导和具体的代码示例,帮助您设计出高效可靠的MySQL商…

    2026年9月28日 • 用户投稿
    000
  • 抖音开播需要满足什么条件?抖音开播怎么开

    抖音开播需要满足什么条件?抖音开播怎么开抖音开播需要满足什么条件?抖音开播怎么开抖音开播需要满足什么条件?抖音开播怎么开抖音开播需要满足什么条件?抖音开播怎么开

    近年来,抖音直播凭借其强大的互动性和传播力,迅速成为最受欢迎的短视频平台之一。越来越多的用户希望加入直播行列,展示自我或实现变现。那么,抖音开播究竟需要满足哪些条件?又该如何操作呢?本文将为你全面解读抖音直播的入门指南,助你顺利开启直播之旅! 一、抖音开播的基础要求 1. 完成实名认证:必须通过抖音…

    2026年9月28日 • 用户投稿
    100
  • sublime怎么在macos上设置全局快捷键启动_macOS全局快捷键设置方法

    sublime怎么在macos上设置全局快捷键启动_macOS全局快捷键设置方法sublime怎么在macos上设置全局快捷键启动_macOS全局快捷键设置方法sublime怎么在macos上设置全局快捷键启动_macOS全局快捷键设置方法sublime怎么在macos上设置全局快捷键启动_macOS全局快捷键设置方法

    最直接的方法是使用macOS的“自动操作”创建启动Sublime Text的服务,并通过系统设置为其分配全局快捷键。首先打开“自动操作”,新建一个“服务”,配置为“没有输入”且“位于任何应用程序”。接着添加“运行AppleScript”动作,替换脚本内容为:on run {input, parame…

    2026年9月28日 • 用户投稿
    000
  • 如何通过Elser AI Comics生成适合印刷的高分辨率漫画作品?

    如何通过Elser AI Comics生成适合印刷的高分辨率漫画作品?如何通过Elser AI Comics生成适合印刷的高分辨率漫画作品?如何通过Elser AI Comics生成适合印刷的高分辨率漫画作品?如何通过Elser AI Comics生成适合印刷的高分辨率漫画作品?

    要生成适合印刷的高分辨率漫画作品,关键在于调整elser ai comics的输出尺寸、dpi和细节控制。1. 设置画布尺寸为实际打印大小,并将dpi调至300;2. 使用超分工具提升清晰度而非直接拉伸;3. 选择适合印刷的风格并优化提示词以增强线条与背景清晰度;4. 分层输出人物、背景和特效以便后…

    2026年9月28日 • 用户投稿
    000
  • 小红书如何通过Vlog增加粉丝互动 小红书Vlog内容的制作指南

    小红书如何通过Vlog增加粉丝互动 小红书Vlog内容的制作指南小红书如何通过Vlog增加粉丝互动 小红书Vlog内容的制作指南小红书如何通过Vlog增加粉丝互动 小红书Vlog内容的制作指南小红书如何通过Vlog增加粉丝互动 小红书Vlog内容的制作指南

    要增加小红书vlog粉丝互动,核心是提供真实、有温度的内容,通过情感连接和价值分享引发共鸣;2. 内容策划应聚焦能为观众带来的价值,如生活灵感、实用技巧或情绪陪伴,而非盲目追热点;3. 叙事需有起承转合,设置小目标或挑战并展现真实过程,增强代入感;4. 视觉上善用自然光与构图,听觉上保证清晰录音,提…

    2026年9月28日 • 用户投稿
    000
  • MySQL如何监控数据库连接数 连接池使用率与连接泄漏检测

    MySQL如何监控数据库连接数 连接池使用率与连接泄漏检测MySQL如何监控数据库连接数 连接池使用率与连接泄漏检测MySQL如何监控数据库连接数 连接池使用率与连接泄漏检测MySQL如何监控数据库连接数 连接池使用率与连接泄漏检测

    数据库连接数监控、连接池使用率跟踪及连接泄漏检测至关重要。1. 使用show status命令监控mysql连接数,如show status like ‘threads_connected’,并集成到prometheus和grafana中可视化;2. 连接池监控依赖具体技术如…

    2026年9月28日 • 用户投稿
    000
  • 探索Linux下C语言中的位运算

    探索Linux下C语言中的位运算探索Linux下C语言中的位运算探索Linux下C语言中的位运算探索Linux下C语言中的位运算

    在Linux下使用C语言进行编程时,位运算是一种非常重要且高效的操作方式。通过位运算,我们可以对变量中的位进行逻辑操作,进而实现一些复杂的功能。本文将探索在Linux下使用C语言进行位运算操作,并提供具体的代码示例,帮助读者更好地理解与运用。 一、基本概念 位运算符 在C语言中,位运算主要涉及到与(…

    2026年9月28日 • 用户投稿
    000
  • Win10笔记本电脑开启热点的简易指南(一键分享网络连接)

    Win10笔记本电脑开启热点的简易指南(一键分享网络连接)Win10笔记本电脑开启热点的简易指南(一键分享网络连接)Win10笔记本电脑开启热点的简易指南(一键分享网络连接)Win10笔记本电脑开启热点的简易指南(一键分享网络连接)

    随着移动互联网的普及和无线网络的发展,越来越多的人开始使用笔记本电脑进行移动办公和娱乐。然而,有时候我们可能会遇到没有wi-fi信号的情况,这时候如果能够通过笔记本电脑开启热点,将有线网络连接转化为无线信号分享给其他设备使用,就能够解决这个问题。本文将介绍如何在win10笔记本电脑上开启热点功能,方…

    2026年9月28日 • 用户投稿
    000
  • 点餐系统顾客信息表的 MySQL 实现

    点餐系统顾客信息表的 MySQL 实现点餐系统顾客信息表的 MySQL 实现点餐系统顾客信息表的 MySQL 实现点餐系统顾客信息表的 MySQL 实现

    点餐系统顾客信息表的 MySQL 实现,需要具体代码示例 一、引言如今,随着科技的发展和人们消费习惯的改变,点餐系统在餐饮行业中得到了广泛应用。在点餐系统中,顾客信息管理是至关重要的一环。本文将介绍如何使用MySQL数据库来实现点餐系统顾客信息的管理,包括创建表结构、插入数据、查询和更新等操作,同时…

    2026年9月28日 • 用户投稿
    100
  • win10开始菜单无法弹出怎么办?win10开始菜单弹不出来的解决教程

    win10开始菜单无法弹出怎么办?win10开始菜单弹不出来的解决教程win10开始菜单无法弹出怎么办?win10开始菜单弹不出来的解决教程win10开始菜单无法弹出怎么办?win10开始菜单弹不出来的解决教程win10开始菜单无法弹出怎么办?win10开始菜单弹不出来的解决教程

    某些情况下点击 windows10 开始菜单却无法弹出,遇到这种情况该怎么办呢?其实,这个问题可以通过注册表在桌面右键新增一个“重启开始菜单”的选项来解决,这种方法无需重启整个系统就能修复大多数开始菜单无法弹出的情况,从而避免了频繁重启电脑的麻烦。具体的解决步骤如下: Win10开始菜单无法弹出怎么…

    2026年9月28日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信