如何迭代识别Numpy ndarray中的np.nan值?检测失效如何解决
问题原因
你的代码逻辑问题出在空值判断的写法上:X[i,j] == np.nan是无效的判断方式。
根据IEEE 754浮点数标准,np.nan和任何值做相等比较都会返回False,哪怕是np.nan和自身比较也不例外,所以你写的判断条件永远不会触发,自然所有元素都被判定为非空。
修复方案
1. 适配原有迭代逻辑的修改方式
将相等判断替换为Numpy专门用于检测空值的np.isnan()函数即可:
import numpy as np X = np.array([[1,2,4,np.nan],[3,np.nan,4,2],[5,1,6,7],[np.nan,1,2,9]]) for i in range(X.shape[0]): for j in range(X.shape[1]): if np.isnan(X[i,j]): print("This entry is null") else: print("This one is not")
2. 更高效的向量化实现(无需手动写循环)
如果仅需要识别空值位置、统计空值数量,直接调用np.isnan()传入整个数组即可,会返回和原数组形状一致的布尔掩码,对应位置为True即代表是空值:
# 获取空值布尔掩码 null_mask = np.isnan(X) # 统计空值总数 null_total = np.sum(null_mask)
内容的提问来源于stack exchange,提问作者Mario Aguilar
相关产品推荐
相关产品推荐

