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

使用ColumnTransformer时遇numpy.ndarray无columns属性错误求助

解决ColumnTransformer处理后用列名报错的问题

你遇到的两个错误根源完全一致:

  • ColumnTransformer.fit_transform()默认返回numpy.ndarray,而非Pandas DataFrame
  • 数组没有columns属性,也不支持用字符串列名索引,所以后续调用encoder.fit_transform(df_imputed)(用了字符串列名nominal_features)和df_imputed['target']都会报错

方案1:修复现有代码,将数组转回DataFrame

只需要在缺失值填充后,把结果重新转为带列名的DataFrame即可:

# 原填充代码后添加:将数组转回DataFrame,保留原列名
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)

这样后续的编码、目标变量提取都能正常运行,因为df_imputed现在是标准的Pandas DataFrame,具备列名属性。


方案2:合并预处理流程(推荐)

更规范的做法是拆分特征与目标,将所有预处理步骤(填充、编码、缩放)合并为一个完整的流水线,避免中间转换数组的麻烦:

import pandas as pd
import numpy as np
from sklearn.datasets import fetch_openml
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

# 加载数据
dataset = fetch_openml(data_id=1046)
df = pd.DataFrame(data=dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target

# 拆分特征和目标(关键:不要让目标参与特征预处理)
X = df.drop('target', axis=1)
y = df['target']

# 区分数值和类别特征
numeric_features = X.select_dtypes(include=['float64']).columns
nominal_features = X.select_dtypes(include=['object']).columns

# 定义数值特征的预处理管道:缺失值填充 + 标准化
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())
])

# 定义类别特征的预处理管道:缺失值填充 + 独热编码
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('encoder', OneHotEncoder(sparse_output=False, drop='first'))
])

# 合并所有预处理步骤
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, nominal_features)
    ])

# 一步完成所有预处理
X_scaled = preprocessor.fit_transform(X)

这个方案的优势:

  • 避免了中间数组转DataFrame的额外操作
  • 目标变量提前拆分,不会被误处理
  • 流程更简洁,符合Scikit-learn的最佳实践

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:31