OneHotEncoder,TypeError:__init __()得到了意外的关键字参数'drop'

时间:2019-05-13 05:30:51

标签: python scikit-learn

在sklearn 0.20.3文档中,https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html init 具有参数删除功能,但是当我使用相同的参数时,会引发类型错误。

我没有找到任何使用“ drop”关键字的示例,我看到的大多数示例都是使用旧版本的sklearn。在某些情况下,他们使用了ColumnTransfer(即使那是旧版本的OnehotEncoder,因为它会发出未来警告)

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])

onehotencoder = OneHotEncoder(categories = [0],handle_unknown='ignore',drop=[0])

预期结果:应该能够编译以上代码。 实际结果:TypeError( init ()得到了意外的关键字参数'drop')

3 个答案:

答案 0 :(得分:0)

尝试一下:

onehotencoder = OneHotEncoder(categories = [0],handle_unknown='ignore',drop[0])

文档中可能的解释:
无:保留所有功能(默认设置)。
“第一”:在每个功能中删除第一类。如果仅存在一个类别,则该功能将被完全删除。
array:drop [i]是要素X [:, i]中应删除的类别。


试试这个:
我有一个可以为您完成工作的功能:

# Own implementation of One Hot Encoding - Data Transformation
def convert_to_binary(df, column_to_convert):
    categories = list(df[column_to_convert].drop_duplicates())

    for category in categories:
        cat_name = str(category).replace(" ", "_").replace("(", "").replace(")", "").replace("/", "_").replace("-", "").lower()
        col_name = column_to_convert[:5] + '_' + cat_name[:10]
        df[col_name] = 0
        df.loc[(df[column_to_convert] == category), col_name] = 1

    return df

# One Hot Encoding
print("One Hot Encoding categorical data...")
columns_to_convert = [col1,col2]#Enter your column names here that you want to one hot encode.

for column in df_all.columns:              #columns_to_convert
    if df_all.column.dtype == 'category':
        df_all = convert_to_binary(df=df_all, column_to_convert=column)
        df_all.drop(column, axis=1, inplace=True)
print("One Hot Encoding categorical data...completed")

请确保在columns_to_convert

中输入列列表(如果不希望转换所有分类变量)。

答案 1 :(得分:0)

您提供的链接不是针对0.20版本的,而是针对最新版本的。检查版本0.20.3:https://scikit-learn.org/0.20/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder 在该版本上,该参数未记录。因此,解决该问题的方法是将其更新为最新版本的SKlearn。

答案 2 :(得分:0)

升级您当前版本的 scikit-learn 应该可以解决问题:

python -m pip install --user --upgrade scikit-learn