在Sklearn中跨多个同时包含文本和数字的列应用LabelEncoder



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

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']

您可以看看这个关于ColumnTransformer的详细示例。

简而言之,您可以使用以下内容:

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

然而,只有当您有标题为";文件名";以及";动物;在您的数据帧中。似乎你有一个可变数量的列,每行都有动物,这需要一些自定义的预处理,不太适合scikit学习。

最新更新