如何实现数据集缺失值精准插补?以二手车Fuel_Type列为例
二手车Fuel_Type列缺失值与非标准值精准处理方案
问题分析
你的核心问题在于:
- Fuel_Type存在
NaN缺失值,还有–、not supported这类非标准标记 - 数据分布极端:4000+电动车、不足50辆汽油车,直接用
most_frequent会把电动车的缺失值错误填充为汽油车(比如示例里Tesla会被填成Gasoline),完全不符合实际 - 精准填充直接影响分析结果,必须结合车辆属性做针对性处理
分步解决方法
1. 统一非标准值为缺失值
先把所有非标准标记转换成NaN,让缺失值处理逻辑统一:
import pandas as pd import numpy as np # 替换非标准值为NaN df['Fuel_Type'] = df['Fuel_Type'].replace(['–', 'not supported'], np.nan)
2. 基于品牌/车型识别电动车
电动车品牌(比如Tesla、BYD等)的Fuel_Type必然是Electric,直接批量填充:
# 定义电动车品牌列表(根据你的数据集补充更多品牌) electric_brands = ['Tesla', 'NIO', 'BYD', 'Polestar'] df.loc[df['Car'].isin(electric_brands) & df['Fuel_Type'].isna(), 'Fuel_Type'] = 'Electric'
3. 处理混合动力车的缺失值
如果有其他辅助特征(比如Engine_Type、Mileage、Price),优先用这些特征判断填充;如果没有,可按品牌分组,用组内众数填充同品牌车型的缺失值:
# 按Car品牌分组,用组内众数填充混动相关的缺失值 df['Fuel_Type'] = df.groupby('Car')['Fuel_Type'].transform( lambda x: x.fillna(x.mode()[0] if not x.mode().empty else np.nan) )
4. 处理剩余少量缺失值
对于剩下的零星缺失值(占比极低时),可以选择:
- 删除对应行(对整体分析无影响)
- 用全局第二高频的类别填充(避免被电动车的绝对数量主导)
完整代码示例
import pandas as pd import numpy as np # 模拟真实数据集结构 data = { 'Car': ['Toyota', 'Honda', 'Tesla', 'Toyota', 'Ford', 'BYD', 'Honda'], 'Fuel_Type': ['Gasoline', 'E85 Flex Fuel', np.nan, np.nan, '–', 'not supported', 'Hybrid'], 'Transmission': ['Automatic', None, 'Automatic', 'Manual', 'Manual', 'Automatic', 'Manual'] } df = pd.DataFrame(data) # 步骤1:清洗非标准值 df['Fuel_Type'] = df['Fuel_Type'].replace(['–', 'not supported'], np.nan) # 步骤2:填充电动车Fuel_Type electric_brands = ['Tesla', 'BYD'] df.loc[df['Car'].isin(electric_brands) & df['Fuel_Type'].isna(), 'Fuel_Type'] = 'Electric' # 步骤3:按品牌分组填充缺失值 df['Fuel_Type'] = df.groupby('Car')['Fuel_Type'].transform( lambda x: x.fillna(x.mode()[0] if not x.mode().empty else np.nan) ) print(df)
输出结果
Car Fuel_Type Transmission 0 Toyota Gasoline Automatic 1 Honda E85 Flex Fuel None 2 Tesla Electric Automatic 3 Toyota Gasoline Manual 4 Ford NaN Manual 5 BYD Electric Automatic 6 Honda Hybrid Manual
内容的提问来源于stack exchange,提问作者user27500319
相关产品推荐
相关产品推荐

