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

从Pandas DataFrame提取的列表中检查np.nan存在性的异常行为排查

问题原因解析

核心背景:np.nan的特殊性质

np.nan遵循IEEE浮点数标准,它不等于任何值,包括自身(执行np.nan == np.nan会返回False)。但Python的对象身份判断(is)是检查内存地址,同一个np.nan实例的is判断会返回True。


直接列表中nan in 列表返回True的原因

你创建basic_list时,列表里的nan和用来检查的nan是同一个numpy.float64实例。Python列表的in操作在判断元素是否存在时,会优先检查对象身份:如果是同一个实例,即使==比较返回False,也会判定元素存在,因此返回True。


Pandas提取列表后nan in 列表返回False的原因

当你把列表存入Pandas DataFrame,再通过to_list()提取时,Pandas会重新生成nan对象。此时pandas_list中的nan和原列表的nan不是同一个实例(执行basic_list[1] is pandas_list[1]会返回False),同时np.nan == pandas_list[1]也返回False,双重判断都不满足,因此nan in pandas_list返回False。


列表相等性判断为False的原因

列表的==比较是逐个元素用==判断,而nan元素的==比较始终返回False,因此整个列表的相等性判断结果为False。


验证代码

from numpy import nan
import pandas as pd

basic_list = [0.0, nan, 1.0, 2.0]
df = pd.DataFrame({'test_list': basic_list})
pandas_list = df['test_list'].to_list()

# 检查两个nan是否为同一实例
print(basic_list[1] is pandas_list[1])  # 输出: False
# 检查两个nan的相等性
print(basic_list[1] == pandas_list[1])  # 输出: False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:29