【发布时间】:2020-08-10 16:40:16
【问题描述】:
我的数据集(即 dataset_train)有 43 个分类特征,我想在每一列中应用 LabelEncoder。
在这里我得到了所有的分类特征:categorical_features = [features for features in dataset_train.columns if dataset_train[features].dtype == 'O']
现在创建了一个类来执行多个标签编码:
class MultiColumnLabelEncoder:
def __init__(self,columns = None):
self.columns = columns # array of column names to encode
def fit(self,X,y=None):
return self # not relevant here
def transform(self,X):
output = X.copy()
if self.columns is not None:
for col in self.columns:
output[col] = LabelEncoder().fit_transform(output[col])
else:
for colname,col in output.iteritems():
output[colname] = LabelEncoder().fit_transform(col)
return output
def fit_transform(self,X,y=None):
return self.fit(X,y).transform(X)
现在执行后:
from sklearn.preprocessing import LabelEncoder
dataset_train = MultiColumnLabelEncoder(columns = categorical_features).fit_transform(dataset_train)
它向我展示了:
TypeError: argument must be a string or number
请注意 - NaN 值也会在之前处理。
如何处理这种情况??
【问题讨论】:
-
你能包含完整的回溯吗?以及
categorical_features的值 -
您应该只使用 OrdinalEncoder 和 ColumnTransformer 来对列进行子集化,而不是破解自定义类来滥用 LabelEncoder。
标签: python scikit-learn