为何Pandas中的不等于(neq)比较结果存在不一致性?
问题成因解释
这个差异的核心是NaN(非数值)的特殊比较规则,拆解来看:
首先看数组的类型转换:
你用np.array([None,2.3,1.4])创建数组时,因为数组里同时有None和浮点数,numpy会自动把整个数组转为float64类型,其中None会被转换成浮点体系里的特殊值——NaN。然后是两种比较的规则区别:
- 整体矢量化比较(
s_None != s_None):
Pandas(底层基于numpy)为了方便用户快速定位缺失值,对矢量化的不等比较做了特殊逻辑:只要元素是NaN,!=的结果就返回True。所以这行代码的输出其实和s_None.isna()完全一致,第一个元素是NaN,所以取索引0的结果是True。 - 逐元素直接比较(
s_None[0] != s_None[0]):
当你直接取出单个NaN元素做比较时,遵循的是IEEE浮点数的标准规则:NaN和任何值(包括它自己)的比较结果都是False。所以这里NaN != NaN会返回False。
- 整体矢量化比较(
内容的提问来源于stack exchange,提问作者P.Jo
相关产品推荐
相关产品推荐

