pandas检查DataFrame行是否包含NaN时for循环判断结果错误如何解决
问题核心原因
np.nan的比较规则特殊,它和任何值做==判断都会返回False,包括和它自身比较,所以你写的df.iloc[i, 2] == np.nan永远无法触发条件分支,导致输出全是False。
修复方案
1. 测试代码修复
把判断NaN的逻辑换成pd.isna()或者np.isnan()即可,修改后代码如下:
for i in range(5): if pd.isna(df.iloc[i, 2]): result = np.nan else: result = 'False' # 按你的预期输出带年份的结果 print(df.index[i], result)
2. 最终需求的高效实现
你要实现的「第2列值为NaN时,将第0列和第1列数值相加」的需求,不需要写for循环,用pandas向量化操作效率更高、代码更简洁:
# 新列存储计算结果,也可以根据需求直接替换原有列 df['calc_result'] = np.where(pd.isna(df[2]), df[0] + df[1], df[2])
内容的提问来源于stack exchange,提问作者lilTJ
相关产品推荐
相关产品推荐

