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

如何比较含文本、数值及None值且类型不同的两个Pandas DataFrame

解决混合类型DataFrame的相等性检查问题

针对同时包含文本、数值(整数/浮点数)及空值的两个DataFrame,可通过以下两种高效方法判断数据是否一致:

方法一:分类型矢量化比较(推荐,适合大数据量)

该方法将数值列和非数值列分开处理,兼顾类型兼容性和空值判断:

import pandas as pd
import numpy as np

# 1. 分离数值列与非数值列
non_numeric_cols = df1.select_dtypes(exclude=['number']).columns
numeric_cols = df1.select_dtypes(include=['number']).columns

# 2. 检查非数值列:直接比较值,空值视为相等
non_num_match = ((df1[non_numeric_cols] == df2[non_numeric_cols]) | 
                 (df1[non_numeric_cols].isna() & df2[non_numeric_cols].isna())).all().all()

# 3. 检查数值列:允许整数与对应浮点数相等,空值视为相等
num_match = (np.isclose(df1[numeric_cols], df2[numeric_cols], equal_nan=True)).all().all()

# 4. 整体结果:两部分都匹配则数据一致
is_same = non_num_match and num_match

方法二:自定义元素级比较(适合小数据量,逻辑直观)

通过遍历每个元素,自定义相等判断规则:

import pandas as pd

def check_dataframe_equal(df_a, df_b):
    # 先检查形状是否一致
    if df_a.shape != df_b.shape:
        return False
    
    for col in df_a.columns:
        for idx in df_a.index:
            val_a = df_a.loc[idx, col]
            val_b = df_b.loc[idx, col]
            
            # 空值(None/NaN)视为相等
            if pd.isna(val_a) and pd.isna(val_b):
                continue
            
            # 整数与对应浮点数(如5和5.0)视为相等
            if isinstance(val_a, int) and isinstance(val_b, float):
                if not (val_a == val_b and val_b.is_integer()):
                    return False
            elif isinstance(val_a, float) and isinstance(val_b, int):
                if not (val_b == val_a and val_a.is_integer()):
                    return False
            
            # 其他类型直接比较值
            elif val_a != val_b:
                return False
    return True

is_same = check_dataframe_equal(df1, df2)

关键说明

  • 两种方法都默认列名和索引完全一致,如果列名/索引顺序不同,需先对齐(如df2 = df2.reindex_like(df1))。
  • np.isclose自动处理整数与浮点数的数值相等判断,equal_nan=True确保NaN/None被视为相等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:22:49