【ValueError: could not convert string to float: ‘young‘】python利用pandas对string类型的数据序列化

项目场景:

利用sklearn库构建决策树,使用sklearn.tree.DecisionTreeClassifier()提供的方法----fit()决策树可视化的时候,我们看到程序报错了


问题描述

ValueError: could not convert string to float: ‘young’.

在这里插入图片描述


原因分析:

因为在fit()函数不能接收string类型的数据,通过打印的信息可以看到,数据都是string类型的。在使用fit()函数之前,我们需要对数据集进行编码,这里可以使用两种方法:

  1. LabelEncoder:将字符串转换为增量值
  2. OneHotEncoder:使用One-of-K算法将字符串转换为整数

解决方案:

为了对string类型的数据序列化,需要先生成pandas数据,这样方便我们的序列化工作
原始数据->字典->pandas数据,编写代码如下:

    # -------------------------------原始数据->字典->pandas----------------------------------
    lenses_target = []  # 提取每组数据的类别,保存在列表里
    for each in lenses:
        lenses_target.append(each[-1])
    lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']  # 特征标签
    lenses_list = []  # 保存lenses数据的临时列表
    lenses_dict = {}  # 保存lenses数据的字典,用于生成pandas
    for each_label in lensesLabels:  # 提取信息,生成字典
        for each in lenses:
            lenses_list.append(each[lensesLabels.index(each_label)])
        lenses_dict[each_label] = lenses_list
        lenses_list = []
    print(lenses_dict)  # 打印字典信息
    lenses_pd = pd.DataFrame(lenses_dict)  # 生成pandas.DataFrame
    print(lenses_pd)    # 打印pandas.DataFrame
    # ---------------------------------------序列化---------------------------------
    le = LabelEncoder()  # 创建LabelEncoder()对象,用于序列化
    for col in lenses_pd.columns:  # 为每一列序列化
        lenses_pd[col] = le.fit_transform(lenses_pd[col])
    print(lenses_pd)

总结

至此 我们就已经将对string类型的数据序列化了
在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值