Python中使用np.where比较列表时遇到nan值如何直接返回nan
实现方案
首先要先将所有列表转换为数值类型数组,避免字符串与nan混合时的比较逻辑异常,再通过嵌套np.where优先处理nan的场景:
import numpy as np # 原始数据 delta_list = ['2','3','4',np.nan] lb = ['1','2','3','4'] ub = ['5','6','7','8'] # 转换为浮点型数组,统一数值比较逻辑 delta_arr = np.array(delta_list, dtype=np.float64) lb_arr = np.array(lb, dtype=np.float64) ub_arr = np.array(ub, dtype=np.float64) # 优先判断nan,非nan场景走原有判断逻辑 flag_1 = np.where( np.isnan(delta_arr), np.nan, np.where((delta_arr > lb_arr) & (delta_arr < ub_arr), 0, 1) ).tolist()
运行后得到的flag_1结果为[0.0, 0.0, 0.0, nan],如果需要转换为字符串格式可以自行做后续类型处理。
逻辑说明
- 优先用
np.isnan()识别delta_arr中的空值位置,直接对应返回nan - 非空值位置保留原有区间判断规则:落在(lb, ub)区间内返回0,否则返回1
内容的提问来源于stack exchange,提问作者coder_bg
相关产品推荐
相关产品推荐

