
使用pandas的isna()方法可高效生成缺失值指示列,返回布尔序列后转为整型,1表示NaN、0表示非空,简洁可靠。
使用pandas的`isna()`方法可高效生成缺失值指示列,返回布尔序列后转为整型,1表示nan、0表示非空,简洁可靠。
在数据预处理中,将缺失值(NaN)转化为二元虚拟变量(dummy variable)是常见操作,尤其适用于建模前的特征工程。直接用 `== np.nan` 或字符串 `'Nan'` 判断均无效——因为根据IEEE标准,`np.nan != np.nan` 恒为 `True`,且NaN在pandas中是浮点型特殊值,不是字符串。正确做法是使用pandas内置的 .isna() 方法,它专为识别各类缺失值(包括 np.nan、None、pd.NaT 等)而设计,返回布尔Series,再通过 .astype(int) 转换为0/1整数序列:
import pandas as pd
import numpy as np
# 构造示例数据
df = pd.DataFrame({'a': [3, 2, np.nan, 3, np.nan]}, index=[1, 2, 3, 4, 5])
df_miss_a = df["a"].isna().astype(int)
print(df_miss_a)输出:
1 0 2 0 3 1 4 0 5 1 Name: a, dtype: int64
✅ 优势说明:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- .isna() 兼容所有pandas支持的缺失值类型,鲁棒性强;
- 链式调用简洁高效,无需循环或自定义函数;
- 返回结果可直接作为新列赋值,例如:df['df_miss_a'] = df['a'].isna().astype(int)。
⚠️ 注意事项:
立即学习“Python免费学习笔记(深入)”;
- 避免使用 df['a'] == np.nan(永远返回全False)或 df['a'].isin([np.nan])(因NaN不等于自身,该方式也不可靠);
- 若需对多个列批量生成缺失指示变量,可用 df.isna().astype(int) 得到完整布尔矩阵;
- 在机器学习流程中,此类指示变量常与插补策略(如均值填充)配合使用,以保留缺失模式信息。
总之,.isna().astype(int) 是生成缺失值虚拟变量最推荐、最地道的pandas写法。

















