在Pandas中精确比较带NaN的浮点数列并统计差异

在Pandas中精确比较带NaN的浮点数列并统计差异

本教程详细介绍了如何在Pandas DataFrame中准确比较包含浮点数和NaN值的列,并统计其差异行数。针对浮点数精度问题,我们采用 round() 方法进行标准化;对于NaN值的特殊处理,则利用 compare() 函数的特性,确保 NaN 对 NaN 不被视为差异。通过结合这两种方法,用户可以有效避免常见比较陷阱,实现可靠的数据差异分析。

挑战分析:浮点数精度与NaN值比较

在数据处理和分析中,比较两个dataframe中特定列的差异是一项常见任务。然而,当这些列包含浮点数和缺失值(nan)时,简单的相等性比较可能会导致不准确的结果。

浮点数精度问题: 浮点数在计算机内部的表示方式决定了它们可能存在微小的精度误差。例如,0.1 + 0.2 可能不严格等于 0.3。因此,直接使用 == 运算符比较两个浮点数可能会将实际上相同的值误判为不同。NaN值处理: 在Pandas中,NaN(Not a Number)代表缺失数据。根据IEEE 754浮点数标准,NaN 与任何值(包括 NaN 自身)的比较结果都是 False。这意味着,如果两列中对应位置都是 NaN,直接比较会认为它们是不同的,这与我们通常希望 NaN 对 NaN 不计入差异的业务逻辑相悖。

为了解决这些挑战,我们需要一种更健壮的方法来执行比较。

解决方案:结合 round() 与 compare()

Pandas库提供了强大的工具来处理这些复杂场景。我们可以结合使用 round() 方法来标准化浮点数精度,以及 compare() 方法来智能地识别差异并处理NaN值。

1. 处理浮点数精度:round() 方法

在进行浮点数比较之前,通过 round() 方法将浮点数四舍五入到指定的精度,可以有效消除因精度误差导致的误判。选择合适的精度至关重要,它应基于数据的实际需求和可接受的误差范围。

import pandas as pd# 示例数据d1 = {"col": [7.1, 2.0, 3.0, 4.0, None, 1.9, 1.3]}d2 = {"col": [7.1, 2.5, 3.0, 4.0, None, 1.2, None]}df1 = pd.DataFrame(d1)df2 = pd.DataFrame(d2)# 将目标列的浮点数四舍五入到指定的小数位数,例如4位df1["col"] = df1["col"].round(4)df2["col"] = df2["col"].round(4)print("处理精度后的df1:n", df1)print("n处理精度后的df2:n", df2)

通过 round() 操作,我们确保了在后续比较中,只有在指定精度范围外存在差异的浮点数才会被识别。

2. 识别差异并处理NaN:compare() 方法

Pandas的 DataFrame.compare() 方法是专门设计用于比较两个DataFrame并突出显示差异的工具。它能够智能地处理NaN值:当两个DataFrame在相同位置都包含 NaN 时,compare() 方法不会将其视为差异并包含在结果中,这完美符合我们“NaN 对 NaN 不计入差异”的需求。

compare() 方法会返回一个新的DataFrame,其中只包含两个原始DataFrame中不同的行和列。对于每个不同的单元格,它会创建两列:self(来自调用compare()的DataFrame)和 other(来自作为参数传入的DataFrame)。

# 使用compare方法比较处理过精度的DataFramecomparison = df1.compare(df2)print("n差异比较结果:n", comparison)

输出解释:comparison DataFrame的列是多级索引,外层索引是原始列名(例如 col),内层索引是 self 和 other,分别表示 df1 和 df2 中对应位置的值。例如,在索引为1的行中,df1[‘col’] 的值为 2.0,而 df2[‘col’] 的值为 2.5,因此这一行被 compare 识别为差异。值得注意的是,原始数据中索引为4的行,df1[‘col’] 和 df2[‘col’] 都为 None(即 NaN)。由于 compare() 的默认行为,这一对 NaN 值并未出现在 comparison 结果中,表明它们没有被视为差异。

统计差异行数

一旦 compare() 方法返回了差异DataFrame,统计不同行的数量就非常简单了。只需获取 comparison DataFrame的行数即可。

# 统计差异行数different_rows_count = len(comparison)print("n不同行数:", different_rows_count)

结合上述步骤,完整的实现代码如下:

import pandas as pd# 原始数据d1 = {"col": [7.1, 2.0, 3.0, 4.0, None, 1.9, 1.3]}d2 = {"col": [7.1, 2.5, 3.0, 4.0, None, 1.2, None]}df1 = pd.DataFrame(d1)df2 = pd.DataFrame(d2)print("原始df1:n", df1)print("n原始df2:n", df2)# 步骤1: 处理浮点数精度,例如四舍五入到4位小数df1["col"] = df1["col"].round(4)df2["col"] = df2["col"].round(4)print("n处理精度后的df1:n", df1)print("n处理精度后的df2:n", df2)# 步骤2: 使用compare方法识别差异# compare方法会自动处理NaN对NaN的情况,不将其计入差异comparison = df1.compare(df2)print("n差异比较结果 (compare方法输出):n", comparison)# 步骤3: 统计差异行数different_rows_count = len(comparison)print("n不同行数:", different_rows_count)

运行结果示例:

原始df1:    col0  7.11  2.02  3.03  4.04  NaN5  1.96  1.3原始df2:    col0  7.11  2.52  3.03  4.04  NaN5  1.26  NaN处理精度后的df1:    col0  7.11  2.02  3.03  4.04  NaN5  1.96  1.3处理精度后的df2:    col0  7.11  2.52  3.03  4.04  NaN5  1.26  NaN差异比较结果 (compare方法输出):    col         self other1   2.0   2.55   1.9   1.26   1.3   NaN不同行数: 3

从结果可以看出,索引为1、5、6的行被识别为差异。索引为4的行,由于两DataFrame的col列都为NaN,因此未被计入差异,符合预期。

注意事项

选择合适的精度: round() 方法的精度参数 (decimals) 应根据数据的特性和业务需求仔细选择。过高的精度可能无法解决浮点数误差,过低的精度则可能掩盖实际的微小差异。compare() 方法的灵活性: compare() 方法还有其他参数,例如 align_axis 可以控制比较时是否对齐索引和列,keep_shape 可以返回与原始DataFrame形状相同的DataFrame(用 NaN 填充非差异部分),这些在特定场景下可能有用。性能考量: 对于非常大的DataFrame,compare() 方法可能会占用较多内存。在极端情况下,可以考虑分块处理或使用其他更底层的优化方法。多列比较: 如果需要比较多列,可以对所有相关列应用 round(),然后直接使用 compare() 方法比较整个DataFrame,它会自动识别所有列中的差异。非数值列: 本教程主要针对浮点数列。对于字符串或其他类型列的差异比较,compare() 方法同样适用,但无需进行 round() 操作。

以上就是在Pandas中精确比较带NaN的浮点数列并统计差异的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
高效转换 NumPy uint8 字节流为 uint16 图像数据
上一篇 2025年12月14日 15:59:52
动态执行 Except 块的正确姿势
下一篇 2025年12月14日 15:59:57

相关推荐

  • sublime如何高亮显示当前编辑行_Sublime当前编辑行高亮显示设置指南

    sublime如何高亮显示当前编辑行_Sublime当前编辑行高亮显示设置指南sublime如何高亮显示当前编辑行_Sublime当前编辑行高亮显示设置指南sublime如何高亮显示当前编辑行_Sublime当前编辑行高亮显示设置指南sublime如何高亮显示当前编辑行_Sublime当前编辑行高亮显示设置指南

    启用Sublime Text当前行高亮需在用户配置中添加”highlight_line”: true,并可通过修改主题文件自定义颜色,注意语法正确与作用域匹配。 Sublime Text 高亮显示当前编辑行,能让你更专注于正在编写的代码,减少视觉疲劳,提高效率。简单来说,通过…

    2026年9月28日 • 用户投稿
    200
  • 谷歌发布实验性 AI 工具 Mixboard,支持使用自然语言生成创意板

    谷歌发布实验性 AI 工具 Mixboard,支持使用自然语言生成创意板谷歌发布实验性 AI 工具 Mixboard,支持使用自然语言生成创意板谷歌发布实验性 AI 工具 Mixboard,支持使用自然语言生成创意板谷歌发布实验性 AI 工具 Mixboard,支持使用自然语言生成创意板

    谷歌近日发布了一款实验性 ai 创意工具——mixboard,这是一款依托生成式 ai 技术打造的概念设计板,主打“开放式画布”理念,致力于帮助用户高效地将创意可视化。 https://www.php.cn/link/4fa0d97504185879b6e7524dda47d98b 据官方介绍,Mi…

    2026年9月28日 • 用户投稿
    000
  • Win7网上邻居怎么添加?

    Win7网上邻居怎么添加?Win7网上邻居怎么添加?Win7网上邻居怎么添加?Win7网上邻居怎么添加?

    在windows 10系统问世之前,许多用户都在使用windows 7系统。然而,部分用户在系统设置中找不到网上邻居功能,实际上只需要手动添加即可。接下来,本文将为您详细介绍如何在windows 7中添加网上邻居。 网上邻居是一种方便的工具,它能够快速访问网络中的共享计算机、打印机以及其他资源。如果…

    2026年9月28日 • 用户投稿
    200
  • Java Mail iCal会议邀请时区偏移问题详解与解决方案

    Java Mail iCal会议邀请时区偏移问题详解与解决方案Java Mail iCal会议邀请时区偏移问题详解与解决方案Java Mail iCal会议邀请时区偏移问题详解与解决方案Java Mail iCal会议邀请时区偏移问题详解与解决方案

    本文旨在解决Java Mail发送iCal会议邀请时因时区处理不当导致的会议时间偏移问题。核心问题在于iCal DTSTART和DTEND属性末尾的’Z’字符,它将时间指定为UTC,从而忽略了本地时区设置。教程将详细介绍iCal时间格式规范,并提供基于Java java.ti…

    2026年9月28日 • 用户投稿
    100
  • 程序员如何安装Sublime_高效代码编辑器安装配置指南

    程序员如何安装Sublime_高效代码编辑器安装配置指南程序员如何安装Sublime_高效代码编辑器安装配置指南程序员如何安装Sublime_高效代码编辑器安装配置指南程序员如何安装Sublime_高效代码编辑器安装配置指南

    Sublime Text是轻量高效的跨平台代码编辑器,支持多语言和插件扩展。首先从官网下载安装,可选激活去除提示;接着通过控制台安装Package Control插件管理工具;再使用命令面板安装Emmet、BracketHighlighter等常用插件;最后在用户设置中配置tab大小、换行、高亮等个…

    2026年9月28日 • 用户投稿
    100
  • TikTok私信显示异常怎么办

    TikTok私信显示异常怎么办TikTok私信显示异常怎么办TikTok私信显示异常怎么办TikTok私信显示异常怎么办

    私信异常多因设置、规则或技术问题,需检查互关状态、隐私权限、年龄限制及网络状况,排除违规行为并更新应用,必要时联系官方客服处理。 当TikTok私信显示异常时,可能是由多种原因导致的,包括账号设置、平台规则限制或技术问题。要解决这个问题,需要从多个方面逐一排查和处理。 检查账号设置与互动条件 私信功…

    2026年9月28日 • 用户投稿
    100
  • 豆包 AI 大模型如何和 AI 模型风格设计工具结合设计风格?攻略​

    豆包 AI 大模型如何和 AI 模型风格设计工具结合设计风格?攻略​豆包 AI 大模型如何和 AI 模型风格设计工具结合设计风格?攻略​豆包 AI 大模型如何和 AI 模型风格设计工具结合设计风格?攻略​豆包 AI 大模型如何和 AI 模型风格设计工具结合设计风格?攻略​

    全民k歌:歌房舞台效果开启指南 腾讯出品的全民K歌,以其智能打分、修音、混音和专业音效等功能,深受K歌爱好者喜爱。本教程将详细指导您如何在全民K歌歌房中开启炫酷的舞台效果。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 步骤: 打开全民K歌…

    2026年9月28日 • 用户投稿
    200
  • 抖音的私信关了怎么开启?私信关了对方发信息显示什么?

    抖音的私信关了怎么开启?私信关了对方发信息显示什么?抖音的私信关了怎么开启?私信关了对方发信息显示什么?抖音的私信关了怎么开启?私信关了对方发信息显示什么?抖音的私信关了怎么开启?私信关了对方发信息显示什么?

    抖音的私信功能是用户之间交流的重要工具,但有时可能因设置调整而被关闭。本文将为您详细说明如何重新打开私信权限,并介绍关闭后他人发送消息时会看到哪些提示,助您更好地掌控社交互动与隐私安全。 一、抖音私信关闭了如何重新开启? 若您发现无法收到或发送私信,很可能是私信接收权限被关闭。只需几个简单步骤即可恢…

    2026年9月28日 • 用户投稿
    100
  • Linux ulimit命令详解与使用方法

    ulimit用于限制进程资源,如文件大小、进程数和内存;默认显示文件大小软限制,常用选项包括-f、-n、-u等,软限制可由用户调整,硬限制需root修改;通过ulimit -a查看所有限制,设置如ulimit -n 1024可限制打开文件数;永久配置需编辑/etc/security/limits.c…

    2026年9月28日
    100
  • VSCode如何集成天文数据分析工具 VSCode天文数据处理项目的环境配置

    安装anaconda或miniconda以管理python环境和依赖;2. 下载并安装vscode;3. 安装python、jupyter、remote – ssh和gitlens等扩展以增强功能;4. 使用conda或venv创建名为astro_env的虚拟环境并激活;5. 在虚拟环境…

    2026年9月28日
    300
  • 欧盟统计局:中国成欧盟高科技产品最大供应国

    欧盟统计局:中国成欧盟高科技产品最大供应国欧盟统计局:中国成欧盟高科技产品最大供应国欧盟统计局:中国成欧盟高科技产品最大供应国欧盟统计局:中国成欧盟高科技产品最大供应国

    当地时间9月24日,欧盟统计局发布的最新数据显示,2024年欧盟在高科技产品贸易领域实现重要转折,对外贸易时隔四年再次回归顺差。其中,中国在欧盟高科技进口体系中继续保持关键地位。 统计显示,2024年欧盟高科技产品进口总额为4780亿欧元,同比微降0.2%;出口则达5010亿欧元,较2023年增长8…

    2026年9月28日 • 用户投稿
    100
  • sublime怎么配置python的虚拟环境_Python虚拟环境集成指南

    sublime怎么配置python的虚拟环境_Python虚拟环境集成指南sublime怎么配置python的虚拟环境_Python虚拟环境集成指南sublime怎么配置python的虚拟环境_Python虚拟环境集成指南sublime怎么配置python的虚拟环境_Python虚拟环境集成指南

    答案是通过创建自定义构建系统和配置项目文件确保Sublime Text使用指定虚拟环境。具体做法包括:在.sublime-build文件中指定虚拟环境Python解释器路径,结合.cmd字段设置无缓冲运行参数-u,并在.sublime-project文件中为项目定义独立的build_systems与…

    2026年9月28日 • 用户投稿
    100
  • 如何在Docker中安装Linux环境_Docker容器运行Ubuntu系统

    如何在Docker中安装Linux环境_Docker容器运行Ubuntu系统如何在Docker中安装Linux环境_Docker容器运行Ubuntu系统如何在Docker中安装Linux环境_Docker容器运行Ubuntu系统如何在Docker中安装Linux环境_Docker容器运行Ubuntu系统

    首先拉取Ubuntu镜像并启动容器,使用docker pull ubuntu:20.04和docker run -it命令进入系统,安装软件需执行apt update并配置常用工具,通过-v参数实现文件挂载共享,建议用Dockerfile或提交容器保存配置以防丢失。 在Docker中安装Linux环…

    2026年9月28日 • 用户投稿
    100
  • 小红书发作品怎么屏蔽好友?小红书发作品屏蔽好友能看到吗

    小红书发作品怎么屏蔽好友?小红书发作品屏蔽好友能看到吗小红书发作品怎么屏蔽好友?小红书发作品屏蔽好友能看到吗小红书发作品怎么屏蔽好友?小红书发作品屏蔽好友能看到吗小红书发作品怎么屏蔽好友?小红书发作品屏蔽好友能看到吗

    在当下信息高速流通的时代,小红书已成为许多人记录生活、分享观点的重要平台。然而,并非所有内容都适合向所有人展示,尤其是当某些好友可能对特定内容产生误解或不适时。那么,如何在发布作品时屏蔽特定好友?被屏蔽的人还能看到吗?接下来,我将为你全面解析。 一、为何需要在小红书屏蔽好友 1. 维护个人隐私:部分…

    2026年9月28日 • 用户投稿
    300
  • 夸克怎么彻底卸载干净_夸克APP及相关数据完全清除教程

    夸克怎么彻底卸载干净_夸克APP及相关数据完全清除教程夸克怎么彻底卸载干净_夸克APP及相关数据完全清除教程夸克怎么彻底卸载干净_夸克APP及相关数据完全清除教程夸克怎么彻底卸载干净_夸克APP及相关数据完全清除教程

    彻底卸载夸克APP需先通过系统设置卸载主程序,再手动删除残留文件夹如/Android/data/com.quark.browser,清除账户同步数据,并使用清理工具深度扫描残留项。 如果您尝试从设备中移除夸克应用,但发现残留数据或配置文件仍然存在,则可能是由于卸载过程中未清除用户数据与缓存信息。以下…

    2026年9月28日 • 用户投稿
    100
  • DeepSeek如何实现模型联邦学习 DeepSeek分布式训练架构配置指南

    DeepSeek如何实现模型联邦学习 DeepSeek分布式训练架构配置指南DeepSeek如何实现模型联邦学习 DeepSeek分布式训练架构配置指南DeepSeek如何实现模型联邦学习 DeepSeek分布式训练架构配置指南DeepSeek如何实现模型联邦学习 DeepSeek分布式训练架构配置指南

    本文将深入探讨DeepSeek如何实现模型联邦学习,并提供一套详细的分布式训练架构配置指南。我们将从联邦学习的核心概念出发,解析DeepSeek在这一领域的独特技术实现路径,并逐步讲解如何配置和部署其分布式训练架构,以帮助用户理解并实践联邦学习的强大能力。 ☞☞☞AI 智能聊天, 问答助手, AI …

    2026年9月28日 • 用户投稿
    100
  • Android游戏开发:基于线段交点的精确碰撞检测

    Android游戏开发:基于线段交点的精确碰撞检测Android游戏开发:基于线段交点的精确碰撞检测Android游戏开发:基于线段交点的精确碰撞检测Android游戏开发:基于线段交点的精确碰撞检测

    本教程详细讲解了如何在Android Pong游戏中实现精确的线段交点检测与碰撞处理。通过将球的运动轨迹和挡板视为线段,并利用代数方程计算它们的交点,可以准确判断碰撞发生的位置。文章提供了具体的数学原理、Java实现代码以及在游戏开发中的应用注意事项,帮助开发者优化游戏物理反馈。 在android等…

    2026年9月28日 • 用户投稿
    200
  • Win10系统无法更新设备驱动更新被禁用

    Win10系统无法更新设备驱动更新被禁用Win10系统无法更新设备驱动更新被禁用Win10系统无法更新设备驱动更新被禁用Win10系统无法更新设备驱动更新被禁用

    windows 10 系统默认会自动更新系统和驱动程序,但有些用户可能会遇到驱动更新被禁用的情况。如果 win10 设备驱动更新被禁用了,该如何解决呢?接下来,小编将为大家详细介绍具体的操作步骤,希望能帮到有需要的朋友们。 Win10 系统无法更新设备驱动更新被禁用怎么办: 首先,按下 Win+R …

    2026年9月28日 • 用户投稿
    100
  • sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南

    sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南

    要实现Sublime Text侧边栏显示Git状态,需安装GitGutter插件。首先通过Package Control安装GitGutter,重启编辑器后即可在侧边栏文件名旁看到Git状态图标,如“M”表示修改,“A”表示新增,“?”表示未跟踪;同时行号区会显示增删改的彩色标记。该插件基于社区驱动…

    2026年9月28日 • 用户投稿
    100
  • Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程

    Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程

    首先检查Safari标签栏位置设置,1、打开设置进入Safari选项,2、将标签栏位置改为顶部;若无效,3、重启Safari浏览器;4、排查辅助功能中的便捷访问是否开启并关闭;最后更新iOS系统至最新版本以修复显示异常。 如果您发现Safari浏览器的地址栏显示在屏幕底部而非顶部,可能是由于设备界面…

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

发表回复

登录后才能评论
关注微信