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

如何在Python中含缺失值时创建虚拟变量并保留缺失值

保留缺失值的虚拟变量创建方法

问题出在astype(int)上——普通整数类型没法存储缺失值,所以pandas会把布尔运算产生的NaN强制转成0。要保留缺失值,有两种简单的解决方法:

方法一:使用pandas可空整数类型Int64

直接将结果转为大写I的Int64类型,它支持存储整数和NaN:

import pandas as pd
import numpy as np

mydata = {'x' : [10, 50, np.nan, 32, 47, np.nan, 20, 5, 100, 62], 
          'y' : [10, 1, 5,  np.nan, 47, np.nan, 8, 5, 100, 3]}
df = pd.DataFrame(mydata)

# 用Int64类型保留缺失值
df["z"] = ((df["x"] >= 50) & (df["y"] <= 20)).astype('Int64')

print(df)

运行后z列会保留原数据中的缺失值:当x或y为NaN时,z对应位置也是NaN;满足条件的为1,不满足的为0。

方法二:用np.where显式处理缺失值

如果需要得到float类型的结果,也可以用np.where判断是否为缺失值,再赋值:

import pandas as pd
import numpy as np

mydata = {'x' : [10, 50, np.nan, 32, 47, np.nan, 20, 5, 100, 62], 
          'y' : [10, 1, 5,  np.nan, 47, np.nan, 8, 5, 100, 3]}
df = pd.DataFrame(mydata)

condition = (df["x"] >= 50) & (df["y"] <= 20)
# 当条件不为NaN时转成整数,否则保留NaN
df["z"] = np.where(condition.notna(), condition.astype(int), np.nan)

print(df)

原理说明

当x或y是NaN时,df["x"] >= 50或df["y"] <= 20的运算结果为NaN,布尔与运算后结果还是NaN。普通int类型无法存储NaN,所以astype(int)会自动将NaN转为0;而Int64是pandas专门设计的可空整数类型,能够同时存储整数和缺失值,因此可以保留原始的NaN状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:54:17