【问题标题】:Self Define in LabelEncoder在 LabelEncoder 中自定义
【发布时间】:2021-12-29 03:01:35
【问题描述】:

尝试在 csv 文件中编码数据。课堂上的TA推荐sklearn中的LabelEncoder。有一列名称为education_level。我需要按“高、中、低”的顺序对其进行编码。但是 LabelEncoder.fit_transform 默认使用 ASCII 码,这意味着它会按照“高、低、中”的顺序进行编码。

找不到使用自定义顺序对其进行编码的方法。下面附上代码。

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics

# load train.csv
df = pd.read_csv('./train.csv')
objfeatures = df.select_dtypes(include="object").columns
le = preprocessing.LabelEncoder()

# Use Label Encoder
# TODO 
# Any Better Way to encode the data? How to deal with missing values
for feat in objfeatures:
    df[feat] = le.fit_transform(df[feat].astype(str))

【问题讨论】:

    标签: python dataframe label-encoding


    【解决方案1】:

    您应该使用OrdinalEncoder 并使用数组列表定义每列的类别,请参阅help page

    from sklearn.preprocessing import OrdinalEncoder
    
    df = pd.DataFrame({'education_level':['High','Medium','Low','Medium'],
    'var':['a','b','c','b']})
    

    在这里定义第一列的顺序,然后是第二列的顺序:

    oe = OrdinalEncoder(categories=[['High','Medium','Low'],['c','b','a']])
    
    df
    
      education_level var
    0            High   a
    1          Medium   b
    2             Low   c
    3          Medium   b
    
    oe.fit_transform(df)
     
    array([[0., 2.],
           [1., 1.],
           [2., 0.],
           [1., 1.]])
    

    【讨论】:

    • 抱歉回复晚了。我想知道第二列代表什么?让它成为1-1功能?刚刚阅读帮助页面,但仍然无法弄清楚。所以在我的情况下,我需要复制“education_level”并将其设为二维数组然后对其进行编码?没有其他方法可以仅将级别转换为 int 吗?非常感谢!
    猜你喜欢
    • 2016-12-18
    • 2019-06-28
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2017-06-06
    • 2017-04-11
    • 2018-12-28
    • 2017-10-12
    相关资源
    最近更新 更多