Python中为DataFrame变量缺失值生成哑变量的问题求助
解决DataFrame缺失值编码问题
问题原因
你之前的代码无效的原因有两个:
- 把缺失值当成了字符串
'Nan',但DataFrame里的NaN是数值型缺失标记,不是字符串,所以== 'Nan'匹配不到任何值。 - 直接用
== Nan判断不成立:首先Nan未定义(应该用np.nan),其次NaN的特性是不等于任何值,包括自身,所以df['a'] == np.nan会返回全False,结果自然全是0。
正确实现方法
以下几种方法都能得到你需要的编码结果:
方法1:np.where结合isna()
import numpy as np import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'a': [3, 2, np.nan, 3, np.nan]}, index=[1,2,3,4,5]) # 生成目标列 df['df_miss_a'] = np.where(df['a'].isna(), 1, 0)
方法2:布尔值直接转整数
isna()返回布尔类型的Series(True对应缺失值,False对应非缺失值),布尔值转整数时True会自动转为1,False转为0,写法更简洁:
df['df_miss_a'] = df['a'].isna().astype(int)
方法3:map函数(可选)
用lambda函数逐个判断:
df['df_miss_a'] = df['a'].map(lambda x: 1 if pd.isna(x) else 0)
最终结果
执行后DataFrame会变成:
a df_miss_a 1 3.0 0 2 2.0 0 3 NaN 1 4 3.0 0 5 NaN 1
内容的提问来源于stack exchange,提问作者Englishman Bob
相关产品推荐
相关产品推荐

