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

如何获取指定列均值并填充该列NaN值(以Wine数据集为例)

用Sklearn实现指定列的均值填充缺失值

步骤说明

先模拟题目中的缺失值场景,再使用sklearn.impute.SimpleImputer完成均值填充,同时可结合ColumnTransformer实现仅针对目标列处理、保留其余列的需求。

完整代码示例

from sklearn.datasets import load_wine
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer

# 1. 加载数据集
data = load_wine()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = pd.Series(data.target)

# 2. 模拟缺失值(符合题目假设:alcohol列2个NaN,magnesium列3个NaN)
df.loc[[0, 1], 'alcohol'] = pd.NA
df.loc[[2, 3, 4], 'magnesium'] = pd.NA

# 3. 方式一:使用ColumnTransformer批量处理目标列(适合后续构建预处理流水线)
# 定义需要填充的列
target_cols = ['alcohol', 'magnesium']
# 创建均值填充器
mean_imputer = SimpleImputer(strategy='mean')
# 构建预处理管道:仅对目标列做均值填充,其余列原样保留
preprocessor = ColumnTransformer(
    transformers=[('mean_fill', mean_imputer, target_cols)],
    remainder='passthrough'
)
# 执行填充并转回DataFrame
processed_data = preprocessor.fit_transform(df.drop('target', axis=1))
processed_df = pd.DataFrame(
    processed_data,
    columns=target_cols + [col for col in df.columns if col not in target_cols and col != 'target']
)
# 恢复target列
processed_df['target'] = df['target']

# ------------------------------
# 方式二:单独处理每一列(更直观,适合快速验证)
# imputer_alcohol = SimpleImputer(strategy='mean')
# df['alcohol'] = imputer_alcohol.fit_transform(df[['alcohol']])
#
# imputer_magnesium = SimpleImputer(strategy='mean')
# df['magnesium'] = imputer_magnesium.fit_transform(df[['magnesium']])

关键细节

  • SimpleImputer(strategy='mean')会自动计算目标列的均值,并用该均值填充对应列的所有NaN值
  • 传入填充器的必须是二维数组,因此使用df[['alcohol']]而非df['alcohol'](后者是一维Series)
  • ColumnTransformer的remainder='passthrough'参数确保未指定处理的列会被完整保留,避免数据丢失

内容的提问来源于stack exchange,提问作者Alex Woolfe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:01:30