OneHotEncoding 数据集中的多列一次

问题描述 投票:0回答:2

考虑以下简单的截图数据集:

  • 2 列:
    X
    Y
  • X
    Y
    列都只有3个可选类别值

我想对这些列进行编码。

我的尝试:

import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

dataset = pd.read_csv('./forestfires.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X[:, 4:12])
X[:, 4:12] = imputer.transform(X[:, 4:12])

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

在当前状态下,它仅对第一列进行编码。我无法真正理解此功能的

sklearn
文档
ColumnTransformer
。我如何选择多个列来同时编码?

python scikit-learn one-hot-encoding
2个回答
0
投票

根据Docs,它说您可以指定要应用转换器的列的名称:

cols = X.columns  # list of strings with col names
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), cols)], remainder='passthrough')

使用当前代码,您可以通过传递具有单个索引的列表来专门转换第一列:

[0]


0
投票

我希望这就是您正在寻找的

enc = OneHotEncoder()
feature_names = [] # Pass your column names to be encoded here
enc_data = enc.fit_transform(dataframe[[feature_names]]).toarray()
enc_columns_data = enc.get_feature_names_out(feature_names)
enc_data = pd.DataFrame(enc_data, columns=enc_columns_data)
© www.soinside.com 2019 - 2024. All rights reserved.