You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计含NaN的DataFrame浮点数列中数值不等的行数?

含NaN浮点数列的比较与差异统计方案

针对你遇到的两个问题(浮点数近似比较、NaN视为相等并排除统计),可以通过结合pandas的NaN判断与numpy的近似相等函数来解决,具体步骤如下:

核心思路

我们需要统计的是非双NaN且浮点值不近似相等的行数:

  1. 先筛选出两列均为NaN的行,这类行直接排除统计;
  2. 对非双NaN的行,用近似比较判断浮点值是否相等;
  3. 最后统计满足「非双NaN且不近似相等」的行数。

代码实现

假设两个DataFrame分别为df1和df2,目标列为target_col:

import pandas as pd
import numpy as np

# 示例数据(可替换为你的真实数据)
df1 = pd.DataFrame({'target_col': [1.234567, np.nan, 3.14159, 2.71828, np.nan]})
df2 = pd.DataFrame({'target_col': [1.234568, np.nan, 3.14159, 2.71829, 5.0]})

# 1. 标记两列均为NaN的行
both_nan = df1['target_col'].isna() & df2['target_col'].isna()

# 2. 判断浮点值是否近似相等(equal_nan=False避免误判单NaN情况)
approx_equal = np.isclose(df1['target_col'], df2['target_col'], equal_nan=False)

# 3. 筛选出需要统计的差异行:非双NaN + 不近似相等
diff_rows = ~both_nan & ~approx_equal

# 统计差异行数
diff_count = diff_rows.sum()

print(f"数值不同的行数:{diff_count}")

关键细节说明

  • np.isclose():通过**相对容差(rtol)和绝对容差(atol)**判断浮点数近似相等,默认参数rtol=1e-05, atol=1e-08可根据你的精度需求调整;
  • both_nan的判断:确保两个NaN被视为相等并排除在统计外;
  • diff_rows的逻辑:只统计那些至少有一个值非NaN,且浮点值确实不近似相等的行。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:22:46