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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:18:22