python - LabelEncoder().fit_transform 给我负值?
问题描述
嘿,
我的数据集中的“城市”列中有不同的城市名称。我很想使用 LabelEncoder() 对其进行编码。但是,我得到了非常令人沮丧的负值结果
df['city_enc'] = LabelEncoder().fit_transform(df['City']).astype('int8')
新的 city_enc 列给了我从 -128 到 127 的值。我不明白为什么 LabelEncoder().fit_transform 给了我负值?我希望它会给出从 0 到 (n-1) 的值。谁能给我解释一下?
最好的问候,兰阮
解决方案
这肯定是因为您试图对超过 128 (0 ... 127) 个不同的城市进行编码(您可以使用 进行检查len(df['City'].unique())
)。
然后,当您强制转换时,int8
您最终会得到负值,以确保所有标签都是不同的。你有int8
256 个不同的值 (-128 ... 127)。例如,如果您将 129 个不同的值编码为int8
,您将使用所有 0 ... 127 个正值,并且将为一项分配标签-128
。
一种简单的解决方案是放弃astype('int8')
转换:
df['city_enc'] = LabelEncoder().fit_transform(df['City']) # defaults to 'int64'
推荐阅读
- mysql - 如何最好地存储历史购物车数据
- javascript - 搜索字段问题 - 输入时不提交,更改 url 但不加载 url
- c++ - 如何使子类在 C++ 中返回不太通用的 typedef?
- javascript - 将字符串解析为对象?(JavaScript)
- nginx - nginx 中虚拟主机中的服务器名称或通配符无效
- resharper - 如何让 ReSharper 停止在 cshtml 中展开我的 lambda?
- sql - 如何使用 Insert 语句将两列或多列数据插入一列从一个表到另一表
- python - 如何用相邻的平均值填充缺失的零值
- sql-server - SQL FROM 子句上的多个表和 WHERE 与 JOIN 中的连接有什么区别
- json - 如何从我的电子表格中获取 JSON 文件