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

使用scikit-learn填充缺失值后列标签丢失及列顺序异常问题

数据集填充缺失值后的列标签与顺序问题解答

1. 为何Doors与Odometer (KM)列顺序颠倒?

ColumnTransformer的输出列顺序完全遵循你定义的transformer列表顺序。你当前的transformer列表依次是:

  • cat_imputer(对应Make、Colour)
  • door_imputer(对应Doors)
  • num_imputer(对应Odometer (KM))
    所以输出的列顺序是Make → Colour → Doors → Odometer (KM),和原数据集的Make → Colour → Odometer (KM) → Doors顺序不一致,导致这两列颠倒。

2. 列标签去向何处?

imputer.fit_transform(X)返回的是NumPy数组,这类数组不具备列名属性。当你直接用pd.DataFrame(filled_x)转换时,Pandas会默认生成数字序列作为列索引,原数据集的列标签因此丢失。

3. 如何恢复列标签?

需要同时调整transformer顺序以匹配原数据集列序,并且在创建DataFrame时显式指定列名:

修改后的代码示例:

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

# 保持与原数据集一致的列顺序
cat_features = ["Make", "Colour"]
num_features = ["Odometer (KM)"]
door_features = ["Doors"]

# 初始化填充器
cat_imputer = SimpleImputer(strategy='constant', fill_value='missing')
num_imputer = SimpleImputer(strategy="mean")
door_imputer = SimpleImputer(strategy='constant', fill_value=4)

# 调整transformer顺序,匹配原数据集列序
imputer = ColumnTransformer([
    ("cat_imputer", cat_imputer, cat_features),
    ("num_imputer", num_imputer, num_features),
    ("door_imputer", door_imputer, door_features)
])

filled_x = imputer.fit_transform(X)
# 显式指定列名,与原数据集一致
new_frame = pd.DataFrame(filled_x, columns=["Make", "Colour", "Odometer (KM)", "Doors"])

如果后续需要用OneHotEncoder处理分类特征,注意ColumnTransformer搭配OneHotEncoder时会扩展分类列,此时可以通过imputer.named_transformers_['cat_imputer'].get_feature_names_out()获取编码后的列名,再与数值列、Doors列合并生成完整列名列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:36:31