首页 > 解决方案 > LabelEncoder 将列中的每个值更改为“LabelEncoder()”

问题描述

我不明白我怎么把事情搞得这么糟糕。对编码非常陌生。

我正在尝试通过 sklearn 上的 LabelEncoder 运行一个 pandas 列,以便将字符串更改为值。如果我不通过 LabelEncoder 运行它,该列会打印出应有的名称列表。当我使用 LabelEncoder 时,每个值实际上都只是更改为“LabelEncoder”。我究竟做错了什么?


import pandas as pd
from sklearn import preprocessing
import numpy as np
data = pd.read_excel('Data.xlsx', sep=',')
import pandas as pd


le = preprocessing.LabelEncoder()
fit = le.fit(data.loc[:,'R_Name'])
data.loc[:,'R_Name'] = fit
print(data.loc[:,'R_Name'])

这是我的结果:


0       LabelEncoder()
1       LabelEncoder()
2       LabelEncoder()
3       LabelEncoder()
4       LabelEncoder()
5       LabelEncoder()
6       LabelEncoder()
7       LabelEncoder()
8       LabelEncoder()
9       LabelEncoder()
10      LabelEncoder()
11      LabelEncoder()
12      LabelEncoder()
13      LabelEncoder()
14      LabelEncoder()
15      LabelEncoder()
16      LabelEncoder()
17      LabelEncoder()
18      LabelEncoder()
19      LabelEncoder()
20      LabelEncoder()
21      LabelEncoder()
22      LabelEncoder()
23      LabelEncoder()
24      LabelEncoder()
25      LabelEncoder()
26      LabelEncoder()
27      LabelEncoder()
28      LabelEncoder()

标签: pythonpandasscikit-learn

解决方案


我猜你想要你的专栏的编码版本。所以你需要在你安装的编码器上调用方法转换。见下文

从 sklearn 导入 pandas 作为 pd 导入预处理 导入 numpy 作为 np

#data = pd.read_excel('Data.xlsx', sep=',')
data = pd.DataFrame({'R_Name':['Pippo','Pluto','Paperino','Pluto','Pippo'],'ID':[1,34,5,22,1]})

le = preprocessing.LabelEncoder()
fitted_le = le.fit(data.loc[:,'R_Name'])
data.loc[:,'R_Name'] = fitted_le.transform(data.loc[:,'R_Name'])
print(data.loc[:,'R_Name'])

输出是:

0    1
1    2
2    0
3    2
4    1
Name: R_Name, dtype: int32

请注意,我定义了一个玩具数据框,因为我不知道您的 Excel 文件结构。我还将LabelEncoder 对象重命名为fitted_le:给变量赋予与方法相同的名称不是一个好主意。实际上,您的代码可以以更简洁的方式重写(我跳过了包含和数据框导入):

le = preprocessing.LabelEncoder()
data['R_Name'] = le.fit_transform(data['R_Name'])
print(data['R_Name'])

这是相关文档的链接https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html


推荐阅读