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

Posted

技术标签:

【中文标题】在数据框的列上使用 sklearn 的 LabelEncoder【英文标题】:Using sklearn's LabelEncoder on a column of a dataframe 【发布时间】:2018-09-10 15:19:33 【问题描述】:

如果我有一个数据框,比如说 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 循环来做到这一点,但是如果已经有一些工具可以做到这一点,那就太好了。感谢任何帮助!

【问题讨论】:

崩溃是什么意思?请出示您的代码 【参考方案1】:

有两种方法.. op1category

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

op2factorize

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

【讨论】:

【参考方案2】:

我不确定您如何使用 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

【讨论】:

我会使用:le.fit(df.levels.unique()) 还是 le.fit(df["levels"].unique())? @Ammastaro,你可以使用任何一个

以上是关于在数据框的列上使用 sklearn 的 LabelEncoder的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sklearn 中一次在多个列上应用预处理方法

熊猫数据框列上的子字符串

使用 sklearn columntransfromer 时解包错误

在数据框的其他列上使用多个日期列和条件注释热图

在日期时间列上合并 2 个数据框的智能算法

列上加索引时事有条件