在数据帧的列上使用sklearn的LabelEncoder

时间:2018-04-01 00:47:14

标签: python pandas scikit-learn data-mining

如果我有数据框,请说df,如果

df["levels"] = pd.Series(["low", "low", "med", "low", "med", "high"])

有没有办法将其改为:

df["levels"] = pd.Series([0,0,1,0,1,2])

我尝试过使用preprocessing.LabelEncoder()来转换它,但它只是折叠成[0,1,2]。我知道我可以用for循环来做这个,但如果有一些工具已经在那里做这个将是很好的任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

有两种方式.. op1 category

pd.Series(["low", "low", "med", "low", "med", "high"]).astype('category').cat.codes
Out[1454]: 
0    1
1    1
2    2
3    1
4    2
5    0
dtype: int8

op2 factorize

pd.factorize(pd.Series(["low", "low", "med", "low", "med", "high"]))[0]
Out[1455]: array([0, 0, 1, 0, 1, 2], dtype=int64)

答案 1 :(得分:1)

我不确定您是如何使用sklearn对字符串列进行编码的,因为原始帖子中未包含该字符串。但是,您可以按照以下步骤使用LabelEncoder()

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
le.fit(df.levels.unique())
df.levels = le.transform(df.levels)
   levels
0       1
1       1
2       2
3       1
4       2
5       0