0

尝试在 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))
4

1 回答 1

0

您应该使用OrdinalEncoder数组列表来使用和定义每列的类别,请参阅帮助页面

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.]])
于 2021-11-18T14:54:07.927 回答