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 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。数据格式如下:

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

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=, 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 编码。

你可能感兴趣的:(python笔记,python报错,KeyError:,b'Iris-setosa',鸢尾花数据集介绍,numpy.loadtxt(),numpy.split(),Python,在字符串前加,’u‘,‘r’,’b‘,的作用)