如何在pandas中使用One hot vector编码缺失值
pandas 快速生成缺失值指示列实现方案
针对大型DataFrame的场景,优先使用pandas原生矢量化方法实现,性能远高于逐行遍历/apply写法,百万级数据处理耗时在毫秒级。
核心单列表实现
如果需要为单列生成「值存在为1、缺失为0」的标记列,直接用notna()搭配整型转换即可,这是性能最优的写法:
# 示例:为列your_col生成标记列your_col_present_flag df['your_col_present_flag'] = df['your_col'].notna().astype(int)
实现逻辑:
notna()是pandas C层实现的矢量化方法,逐元素返回布尔结果:非缺失值返回True,缺失值(np.nan/pd.NA/None)返回False- 布尔值转整型时,
True会自动映射为1,False自动映射为0,完全匹配需求。
批量多列实现
如果需要为多列批量生成对应的标记列,直接遍历目标列即可,底层依然走矢量化运算,性能几乎无损耗:
# 填入需要生成标记列的字段名列表 target_columns = ['col1', 'col2', 'col3'] for col in target_columns: df[f'{col}_present_flag'] = df[col].notna().astype(int)
注意事项
- 禁止使用
df.apply(lambda x: ...)或者逐行iterrows()/itertuples()实现,这类纯Python层循环在大型数据集上性能比原生矢量化方法低10~100倍。 - 如果你的缺失值是用非标准格式存储的(比如空字符串、-999这类特殊占位值),需要先替换为pandas可识别的标准缺失值再执行上述逻辑,示例:
# 将空字符串替换为标准缺失值np.nan df['your_col'] = df['your_col'].replace('', np.nan) - 也可以用numpy的
where方法实现,性能和核心写法几乎一致:import numpy as np df['your_col_present_flag'] = np.where(df['your_col'].isna(), 0, 1)
内容的提问来源于stack exchange,提问作者new2java
相关产品推荐
相关产品推荐

