Python报错:KeyError: b'Iris-setosa',numpy.loadtext()读取鸢尾花数据集,Python字符串前 ’u‘、‘r’、’b‘作用

读取鸢尾花数据集时报错:KeyError: b’Iris-setosa’
解决方式:在字符串前加 ‘b’

附:

1. 鸢尾花数据集介绍(csdn下载数据集

数据集内包含 3 类鸢尾花,分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。每类各 50 个数据,每条记录有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。数据格式如下:

在这里插入图片描述

2. 使用 numpy 模块的 loadtxt() 函数读取数据,split() 函数切分数据
import numpy as np

def iris_type(s):
    it = {b'Iris-setosa': 0, b'Iris-versicolor': 1, b'Iris-virginica': 2}
    return it[s]

path = 'iris.data'
data = np.loadtxt(path, dtype=float, delimiter=',', converters={4: iris_type})
x, y = np.split(data, (4,), axis=1)
print('x=\n',x)
print('y=\n',y)
分析:
1)numpy.loadtxt() 函数:
  • dtype=float,以浮点数类型读取数据集

  • delimiter=’,’,以 ‘,’ 分隔符读取数据

  • converters={4: iris_type},对读取的数据进行预处理,自定义 iris_type() 函数,将第 4 列(从第 0 列开始)数据通过字典将各类鸢尾花映射为数字 0,1,2。

  • 其余参数:

    loadtxt(fname, dtype=<class ‘float’>, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding=‘bytes’)

    • fname,文件路径
    • comments,跳过comments参数开头的行(如 linux 系统的配置文件中用于说明的行一般用“#”开头,可用comments参数进行跳过)
    • skiprows,跳过的行数
    • usecols,指定读取的列
    • unpack,选择是否将数据进行向量输出,默认False,即将数据逐行输出;设置为True时,数据将逐列输出
    • encoding,读取文件使用的编码格式
2)numpy.split() 函数:
  • (4,),切分位置,前 4 列为一组数据 x,其余为一组数组 y。
  • axis=1,默认为0,横向切分;为1时,纵向切分。

3. Python 在字符串前加 ’u‘、‘r’、’b‘ 的作用

1)字符串前加 ’u‘
  • 后面字符串以 Unicode 格式进行编码,一般用在中文字符串前面,防止乱码。
2)字符串前加 ‘r’
  • 声明后面的字符串是普通字符串,防止特殊字符串自带功能生效,如 ’\n‘、’\t‘,一般用在正则表达式、文件路径中使用。

  • 示例:

    str1 = r'a\nb'
    print(str1)
    
    a\nb
    
3)字符串前加 ’b‘
  • ’b‘ 前缀代表 bytes(字节串),Python3 中默认 str(字符串)为Unicode 编码。
  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值