Scikit-learn如何仅对特定列执行缺失值插补?
仅对特定列进行缺失值插补的实现方案
当然可以只针对特定列做缺失值插补!这种场景在数据预处理里非常常见,完全不用动其他无缺失的列,精准操作目标列就行。下面我用Python生态里最常用的工具给你演示具体实现:
先构造符合你场景的示例数据
import pandas as pd import numpy as np # 模拟你的数据集:A(分类列无缺失)、B(数值列无缺失)、C(数值列有缺失) df = pd.DataFrame({ 'A': ['X', 'Y', 'X', 'Y', 'X'], 'B': [10, 20, 30, 40, 50], 'C': [1.5, np.nan, 3.5, np.nan, 5.5] })
方法1:用Pandas直接对目标列操作(最简便)
Pandas的fillna()方法可以直接作用于单个列,完全不影响其他列:
- 均值填充:适合数据分布对称、无明显异常值的情况
# 仅对C列用均值填充缺失值 df['C'] = df['C'].fillna(df['C'].mean())
- 中位数填充:如果C列存在异常值,中位数比均值更稳健
# 仅对C列用中位数填充缺失值 df['C'] = df['C'].fillna(df['C'].median())
- 自定义值填充:如果业务上有特定规则(比如用0或业务默认值)
# 仅对C列用自定义值(比如0)填充缺失值 df['C'] = df['C'].fillna(0)
方法2:用Scikit-learn的插补器(适合更复杂的预处理流程)
如果你需要把插补步骤整合到机器学习流水线里,可以用SimpleImputer,同样只针对C列:
from sklearn.impute import SimpleImputer # 初始化插补器,指定填充策略(比如均值) imputer = SimpleImputer(strategy='mean') # 注意要传入二维数组,所以用df[['C']]而不是df['C'] df['C'] = imputer.fit_transform(df[['C']])
关键要点
不管用哪种方法,核心都是**只选中需要处理的目标列(这里是C列)**执行插补操作,A和B列会保持原始状态,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Glorian
相关产品推荐
相关产品推荐

