【问题标题】:how to resolve 'argument must be a string or number' in label encoder?如何解决标签编码器中的“参数必须是字符串或数字”?
【发布时间】: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


【解决方案1】:

好的,解决了。 我的一个 categorical_features 中只有一个 NaN 值。

之前我写了下面的代码来获取包含 NaN 值的 categorical_features: categorical_features = [ feature for feature in dataset_train.columns if dataset_train[feature].isnull().sum() > 1 and dataset_train[feature].dtype == 'O' ]

这就是为什么我得到那些在其列中有超过 1 个缺失值的特征。

这就是我遇到此错误的原因。

现在,在我将上面的代码修改为: categorical_features = [ feature for feature in dataset_train.columns if dataset_train[feature].isnull().sum() >= 1 and dataset_train[feature].dtype == 'O' ]

现在我得到了每一列,即使只有一个 NaN 值。

它可以执行我在问题中提到的 MultiColumnLabelEncoder 的上述代码。

感谢合作♥️。

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 2020-03-11
    • 2020-05-05
    • 2017-05-06
    • 2019-11-04
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多