首页 > 解决方案 > 在 Sklearn 中跨包含文本和数字的多个列应用 LabelEncoder

问题描述

我正在尝试将 Sklearn (0.24.1) Labelencoder 应用于其中一些列将文本和数字混合在一起的数据集。

dataset.csv
filename1, cat, dog, elephant, hamster, 1, 7, 8, 4, 10
filename2, hamster, dog, lizard, 7, 5, 3, 8, 19, 1
filename3, raccoon, 8, 10, 11, 14, 15, 16, 3, 23
filename4, turtle, cat, lizard, bird, fish, 6, 2, 4, 11
filename5, bird, donkey, 5, 2, 8, 2, 6, 7, 3

我正在尝试将所有动物名称转换为数值。下面是我尝试使用的代码。

input_file = "dataset.csv"
df = pd.read_csv(input_file, header = 0)
numDF = OneHotEncoder().fit_transform(df)

但是当我运行它时,我得到了错误:

TypeError: Encoders require their input to be uniformly strings or numbers. Got ['float', 'str']

标签: scikit-learnsklearn-pandas

解决方案


你可以看看这个关于ColumnTransformer.

简而言之,你会使用类似的东西:

from sklearn.compose import ColumnTransformer
preprocessor = ColumnTransformer(
    transformers=[('categorical', OneHotEncoder(), ['filename', 'animal'])],
    remainder='passthrough',
)
numerical_df = preprocessor.fit_transform(df)

但是,只有在数据框中有固定的标题为“文件名”和“动物”的列时,这才有效。似乎每行都有不同数量的带有动物的列,这需要一些自定义预处理,不太适合 scikit-learn。


推荐阅读