首页 > 解决方案 > LabelEncoder().fit_transform 给我负值?

问题描述

嘿,

我的数据集中的“城市”列中有不同的城市名称。我很想使用 LabelEncoder() 对其进行编码。但是,我得到了非常令人沮丧的负值结果

df['city_enc'] = LabelEncoder().fit_transform(df['City']).astype('int8')

新的 city_enc 列给了我从 -128 到 127 的值。我不明白为什么 LabelEncoder().fit_transform 给了我负值?我希望它会给出从 0 到 (n-1) 的值。谁能给我解释一下?

最好的问候,兰阮

标签: pythonscikit-learnsklearn-pandasone-hot-encodinglabel-encoding

解决方案


这肯定是因为您试图对超过 128 (0 ... 127) 个不同的城市进行编码(您可以使用 进行检查len(df['City'].unique()))。

然后,当您强制转换时,int8您最终会得到负值,以确保所有标签都是不同的。你有int8256 个不同的值 (-128 ... 127)。例如,如果您将 129 个不同的值编码为int8,您将使用所有 0 ... 127 个正值,并且将为一项分配标签-128

一种简单的解决方案是放弃astype('int8')转换:

df['city_enc'] = LabelEncoder().fit_transform(df['City']) # defaults to 'int64'

推荐阅读