【问题标题】:Using sklearn's LabelEncoder on a column of a dataframe在数据框的列上使用 sklearn 的 LabelEncoder
【发布时间】: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 循环来做到这一点,但是如果已经有一些工具可以做到这一点,那就太好了。感谢任何帮助!

【问题讨论】:

  • 崩溃是什么意思?请出示您的代码

标签: python pandas scikit-learn data-mining


【解决方案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,你可以使用任何一个
    猜你喜欢
    • 2017-07-26
    • 2017-06-06
    • 2017-01-23
    • 2023-02-21
    • 2014-08-29
    • 2021-06-26
    • 2020-12-22
    • 2019-02-16
    • 2018-10-19
    相关资源
    最近更新 更多