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

Pandas比较列时将NULL/NA视为相等的简洁实现问询

Pandas含缺失值的列相等性比较解决方案

问题场景

合并两个DataFrame后,比较对应列的值是否相等,但遇到NA/None等缺失值时,==运算符会返回False,不符合预期。测试代码及输出如下:

测试代码

import pandas as pd

# 创建测试DataFrame
df_1 = pd.DataFrame({'key': [1, 2, 3, 4, 5], 'field1': ['foo', pd.NA, None, None, 6]})
df_2 = pd.DataFrame({'pk': [1, 2, 3, 4, 6], 'field2': ['foo', pd.NA, pd.NA, None, 6.0]})

# 左连接
df_joined = df_1.merge(df_2, 'left', left_on='key', right_on='pk')

# 原有比较逻辑
df_joined['compare'] = df_joined['field1'] == df_joined['field2']

print(df_joined)

原有输出

key field1  pk field2  compare
0    1    foo   1    foo     True
1    2   <NA>   2   <NA>    False
2    3   None   3   <NA>    False
3    4   None   4   None    False
4    5     6   5   6.0     True

需要实现让compare列所有值为True的简洁单行写法,不使用apply或自定义函数。

解决方案

使用Pandas的Series.eq()方法,并设置na=True参数,该参数会将两个位置均为缺失值的情况判定为相等:

修改后的比较代码

df_joined['compare'] = df_joined['field1'].eq(df_joined['field2'], na=True)

修改后输出

key field1  pk field2  compare
0    1    foo   1    foo     True
1    2   <NA>   2   <NA>     True
2    3   None   3   <NA>     True
3    4   None   4   None     True
4    5     6   5   6.0     True

原理说明

  • 原生==运算符遵循严格相等逻辑,缺失值与任何值(包括自身)比较都会返回False;
  • eq()方法的na=True参数专门适配缺失值场景,当两个对应元素均为NA/None时,直接判定为相等;
  • 对于数值类型差异(如示例中的6和6.0),eq()会自动处理类型兼容的相等判断,无需额外转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:35:13