如何编写可忽略NaN值的Python列表推导式?
如何用列表推导式排除NaN值
嘿,我来帮你解决这个NaN过滤的问题!你大概率是踩了NaN的一个经典坑——NaN不等于任何值,包括它自己,所以直接写x != NaN这种判断完全没用,根本过滤不掉。下面给你分场景说靠谱的解决方案:
情况1:纯Python环境(无第三方库)
用标准库math里的isnan()函数,但要注意这个函数只能识别数值类型的NaN,所以得先判断元素是不是数值,避免非数值元素报错:
import math my_list = [1, 2, float('nan'), 3, 'test', None] clean_list = [x for x in my_list if not (isinstance(x, (int, float)) and math.isnan(x))] # 结果: [1, 2, 3, 'test', None]
情况2:用NumPy处理数值列表
如果你的列表里都是NumPy数值,直接用np.isnan()就行:
import numpy as np my_list = [1, np.nan, 3, np.nan, 5] clean_list = [x for x in my_list if not np.isnan(x)] # 结果: [1, 3, 5]
要是列表里混了非数值元素,记得先加类型判断,不然np.isnan()会抛出异常。
情况3:用Pandas处理多类型缺失值
最省心的方法是用Pandas的pd.isna(),它能识别各种缺失值类型(包括NaN、None、pd.NaT等),不管元素是数值还是字符串都能处理:
import pandas as pd my_list = [1, np.nan, 'hello', None, float('nan'), pd.NaT] clean_list = [x for x in my_list if not pd.isna(x)] # 结果: [1, 'hello']
简单总结:如果是数据处理场景,优先用pd.isna();纯Python环境就用math.isnan()加类型判断,这样就能完美过滤掉列表里的NaN啦!
内容的提问来源于stack exchange,提问作者Maxim
相关产品推荐
相关产品推荐

