为什么pandas的isin方法对匹配的None值返回False?
pandas
isin() 匹配全None列返回全False的原因 - 核心原因是pandas的默认比较逻辑中,缺失值(包括Python原生
None、np.nan、pd.NA)的相等判断返回值为False,这是pandas为了符合数值计算中NaN的运算逻辑设定的规则,和Python原生None == None返回True的行为不同。你直接执行df1['a'] == df2['a']也会得到全False的结果,和isin()的表现一致,即便是把示例中的None替换为np.nan,也会得到完全相同的结果。 isin()方法传入DataFrame作为参数时,会逐元素判断当前元素是否存在于传入DataFrame的对应列的值集合中,因为None之间比较返回False,所以df1中的None无法匹配到df2列值集合中的None,最终返回全False。
解决方法
- 若仅需要判断两个结构、内容完全一致的DataFrame是否全等,直接使用
df1.equals(df2)方法即可,该方法会将相同位置的缺失值判定为相等,当前场景下调用会直接返回True。 - 若必须使用
isin()实现包含缺失值的匹配逻辑,可以先将两个DataFrame的缺失值替换为一个数据中不存在的特殊占位符,再执行匹配:
import pandas as pd import numpy as np # 定义数据中不存在的占位符 placeholder = "unique_placeholder_2024" df1_fill = df1.fillna(placeholder) df2_fill = df2.fillna(placeholder) # 此时返回结果全为True result = df1_fill.isin(df2_fill)
内容的提问来源于stack exchange,提问作者Yee Cheng
相关产品推荐
相关产品推荐

