如何使用查找表替换pandas DataFrame中的各类缺失值编码
多类型缺失值统一替换解决方案
实现思路
- 自定义安全解析函数处理
missing_info字段的字符串:无需依赖ast.literal_eval,自动识别列表中的数字、字符串类型缺失标记,避免格式解析报错 - 构建特征列名与对应缺失值列表的映射字典
- 用pandas原生矢量化替换方法逐列处理,适配大表的高性能要求
完整代码
import pandas as pd import numpy as np def parse_missing_info(missing_str): # 去除首尾方括号 content = missing_str.strip('[]') # 空列表直接返回 if not content.strip(): return [] # 拆分所有缺失标记并去除空白 items = [i.strip() for i in content.split(',')] parsed_list = [] for item in items: # 识别整数类型标记 if item.lstrip('-').isdigit(): parsed_list.append(int(item)) # 其他类型直接按字符串处理 else: parsed_list.append(item) return parsed_list # 构建特征缺失值映射 feature_missing_map = dict(zip( feature_info['feature'], feature_info['missing_info'].apply(parse_missing_info) )) # 遍历列替换缺失值,可根据需要将pd.NA替换为np.nan等自定义标记 for col, missing_vals in feature_missing_map.items(): if col in df.columns: df[col] = df[col].replace(missing_vals, pd.NA)
方案适配性说明
- 兼容数字、字符串等任意数据类型的自定义缺失值标记
- 不会修改原数据中非缺失的正常值
- 针对大规模DataFrame做了优化,替换操作基于pandas矢量化实现,远快于逐行判断逻辑
内容的提问来源于stack exchange,提问作者timpanister
相关产品推荐
相关产品推荐

