Python中float('nan')含义、float用法及NaN比较规则咨询
Python中NaN与缺失值处理的问题解析
1. 先搞懂float('nan')是什么
float('nan')是Python中生成**NaN(Not a Number,非数值)**的标准方式,它属于浮点类型的特殊值,用来表示缺失、无效或未定义的数值。因为NaN本身是浮点类型的专属特性,所以必须通过float()构造——整数类型没有对应的特殊值,没法用int('nan')生成NaN。
2. 分析文章里的两行代码
第一行:print(df == float('nan'))
这行代码试图把DataFrame的每个元素和NaN做相等比较,但完全达不到识别缺失值的目的。因为NaN的核心特性就是:任何值和NaN用==比较都会返回False,包括NaN自己。所以运行这行后,你会得到一个全是False的布尔DataFrame,根本找不到数据里的真实NaN。
比如你数据里Alice的point列是NaN,但NaN == NaN的结果是False,这行代码会把这个位置错误标记为False。
第二行:print(df = float('nan'))
这是语法错误,因为这里误用了赋值运算符=而非比较运算符==。Python会直接抛出SyntaxError,根本无法运行。大概率是文章里的笔误,就算改成==,也和第一行一样是错误的用法。
3. 正确识别DataFrame中的NaN
在pandas里,识别缺失值要用专门的方法:
df.isna():返回布尔DataFrame,所有NaN的位置会被标记为Truedf.isnull():和isna()完全等价,只是别名
比如针对你的数据集,运行df.isna()会正确显示哪些单元格是NaN——比如第二行全为True,Charlie的age列是True,Frank的state列是True等。
补充:为什么NaN的比较这么特殊?
这是遵循IEEE 754浮点数标准的规定——NaN代表无效数值,所以它和任何值(包括自己)都不相等,这样设计是为了避免把无效值当成有效数值处理。
内容的提问来源于stack exchange,提问作者sagum
相关产品推荐
相关产品推荐

