考虑以下简单的截图数据集:
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
。我如何选择多个列来同时编码?
根据Docs,它说您可以指定要应用转换器的列的名称:
cols = X.columns # list of strings with col names
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), cols)], remainder='passthrough')
使用当前代码,您可以通过传递具有单个索引的列表来专门转换第一列:
[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)