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

如何检查DataFrame列中所有非NaN值均大于0?

正确检查DataFrame列的方法

你遇到的问题有两个核心原因:

  1. 直接用df[col] > 0时,NaN值会被判定为False,导致all()返回False触发断言;
  2. 第二个写法存在运算符优先级错误,且直接用== np.nan无法正确识别NaN(因为NaN不等于任何值,包括自身)。

正确写法一(最直观)

先移除NaN值,再检查剩余所有值是否大于0:

assert df[col].dropna().gt(0).all()

正确写法二(直接检查每个元素)

明确判断每个元素要么是NaN,要么大于0,注意给比较运算加括号保证优先级:

import pandas as pd
assert ((df[col] > 0) | pd.isna(df[col])).all()

或者用numpy的isnan:

import numpy as np
assert ((df[col] > 0) | np.isnan(df[col])).all()

错误原因详解

  • 第一个断言:df[col] > 0中,NaN与任何值比较都会返回False,所以只要列中有NaN,all()就会返回False,触发断言。
  • 第二个断言:|的优先级高于>,代码会被解析为df[col] > (0 | df[col] == np.nan),导致数值类型和布尔类型混合运算,引发TypeError;同时df[col] == np.nan永远返回False,无法识别NaN值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:55:10