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

如何在对DataFrame进行数值比较时保留NaN单元格?

问题描述

我有如下DataFrame:

0123456
00.4932120.586246nan0.589289nan0.6290870.593872
10.5685130.367722nannannannan0.423369
20.700540.735529nannan0.494135nannan
3nannannan0.3388220.4663310.7653670.83082
40.512891nan0.6237820.642438nan0.5411170.92981

执行比较操作 df >= 0.5 后,得到的结果里NaN单元格被转为False(以0表示):

0123456
00101011
11000000
21100000
30000011
41011011

希望比较时保留NaN单元格,让原DataFrame中的NaN在结果中仍为NaN,而非转为False,该如何操作?

解决方案

方法1:用Pandas内置方法组合实现

直接使用ge()比较方法搭配where()保留原NaN:

df.ge(0.5).where(df.notna())

逻辑:df.ge(0.5)完成>=0.5的比较,生成布尔值DataFrame;df.notna()标记原数据中非NaN的位置,where()会将原NaN的位置保留为NaN,其余位置用比较结果填充。

方法2:借助NumPy实现

用numpy.where精准控制每个位置的返回值:

import numpy as np
result = np.where(df.isna(), np.nan, df >= 0.5)
pd.DataFrame(result, index=df.index, columns=df.columns)

逻辑:df.isna()定位所有NaN位置,这些位置直接返回NaN;非NaN位置执行df >=0.5的比较,最后将结果转为DataFrame,保持原索引和列名。

两种方法都能实现需求,最终结果中原DataFrame的NaN单元格会被保留,而非转为False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:45:29