sklearn 分类转换为分类数值

preprocessing.LabelEncoder

标签专用,能够将分类转换为分类数值

preprocessing.OrdinalEncoder

特征专用,能够将分类特征转换为分类数值

将原本的Sex,原本为male与female,现在将这两个数据转换为0和1 。
原本的Embarked,不同的舱位,有SCQ三种,现在可以转换为0、1、2 。
Servived有Yes、No、Unknown,转换为0、1、2 。

import pandas as pd

data = pd.read_csv(r"C:\Users\JYuXuAN\Desktop\sklearn\预处理数据\Narrativedata.csv", index_col=0)
# 防止多索引

# print(data.info())
# print()

Age = data.loc[:, "Age"].values.reshape(-1, 1)  # sklearn当中特征矩阵必须是二维
Age[:20]

# print(Age[:20]) #前20行用作展示,实际上把所有的缺失值使用中位数填充

from sklearn.impute import SimpleImputer

imp_mean = SimpleImputer()  # 实例化,默认用均值填补
imp_median = SimpleImputer(strategy="median")  # 用中位数填补
imp_0 = SimpleImputer(strategy="constant", fill_value=0)  # 用0填补

imp_mean = imp_mean.fit_transform(Age)
imp_median = imp_median.fit_transform(Age)
imp_0 = imp_0.fit_transform(Age)

# 使用中位数填补Age
data.loc[:, "Age"] = imp_median

# print(data.info())
# print()

# 使用众数填补Embarked
Embarked = data.loc[:, "Embarked"].values.reshape(-1, 1)
imp_mode = SimpleImputer(strategy="most_frequent")
data.loc[:, "Embarked"] = imp_mode.fit_transform(Embarked)

# print(data.info())
# print()
# print(data[:20])


from sklearn.preprocessing import LabelEncoder

y = data.iloc[:, -1]

le = LabelEncoder()  # 实例化
le = le.fit(y)  # 导入数据
label = le.transform(y)  # transform接口调取结果

# print(le.classes_) #得到le有多少个属性
# print(label) #label中所有的数据

# label=le.fit_transform(y) #一步到位
# print(le.inverse_transform(label)) #逆转,通过label中的数据反推y原来的数据

data.iloc[:, -1] = label  # 让标签等于我们运行出来的结果

# print(data[:20])

# 上述代码可以一步到位
#
#
from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])
#
#
# 下一步将Sex和Embarked进行转换
from sklearn.preprocessing import OrdinalEncoder
data_ = data.copy()
# print(data.head(20))
print(OrdinalEncoder().fit(data.iloc[:,1:-1]).categories) # categories默认为auto,可以根据标签的个数进行分类
data_.iloc[:,1:-1]=OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])

print(data_.head(20))

之前的相关步骤为填补缺失值,只有全部不为空的数据才可以进行转换。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值