本章概要 Python的标准库包括math、random 、datetime 、os等。此外,Python还拥有强大的 第三方库资源,为开发者提供了大量的开发资源。这些库使Python保持活力和高效。 丰富的开源生态系统也是Python成功和流行的原因之一。 借助常用的机器学习库,Python可以解决多种问题,例如科学计算、数据分析、图像 处理等。Python及其生态系统使它成为全世界用户优先选择的开发工具。 本章会介绍常见的用于数据科学任务和机器学习处理的Python库,包括通用的 NumPy、Pandas、Scikitlearn和Matplotlib等,也包含OpenCV 、jieba、wordcloud等专门 库。这些库提供了机器学习任务中经常使用的基本功能。 学习目标 当完成本章的学习后,要求: (1)了解常用第三方库的调用方法。 (2)熟悉机器学习库的使用步骤。 (3)掌握NumPy、Pandas的数据处理功能。 (4)掌握Matplotlib的绘图方法。 (5)熟悉Scikitlearn机器学习库的使用。 (6)熟悉其他常用库的使用。 3. 1 NumPy NumPy是NumericalPython的简称,是高性能计算和数据分析的基础包,是Python 的一个重要扩充库。NumPy支持高维度数组与矩阵运算,也针对数组运算提供了大量 48 的数学函数库。NumPy运算效率极好,是大量机器学习框架的基础库。 NumPy中主要包含一个强大的N 维数组对象ndaray、整合了C/C+ + 和 FORTRAN代码的工具包,以及丰富的数学函数库,尤其是实用的线性代数、傅里叶变换 和随机数生成函数。 使用NumPy,开发人员可以很方便地执行数组运算、逻辑运算、傅里叶变换和图形图 像操作。NumPy数组的运算效率优于Python的标准List类型。而且在代码中使用 NumPy可以省去很多烦琐的处理语句,代码更为简洁。 研究人员经常将NumPy和稀疏矩阵运算包SciPy(ScientificPython)配合使用,来 解决矩阵运算问题。将NumPy与SciPy、Matplotlib绘图库相组合是一个流行的计算框 架,这个组合可以作为MATLAB的替代方案。 3.1.1 ndaray对象 NumPy的强大功能主要基于底层的一个ndaray结构,其可以生成N维数组对象。 视频讲解ndaray对象是一系列同类型数据的集合,下标索引从0开始,是一个用于存放同类 型元素的多维数组。ndaray中的每个元素在内存中都具有相同大小的存储区域。 与Python中的其他容器对象一样,ndaray可以通过对数组建立索引或切片来访问 数组内容,也可以使用ndaray的方法和属性来访问和修改ndaray的内容。 1.ndaray的内部结构 相对标准的数组,ndaray本质上是一个数据结构。如图3.ndaray内部主要 1所示, 由以下内容构成。 图3.y的数据结构 1ndara (1)数组形状shape:是一个表示数组各维大小的整数元组。 (2)数据类型dtype:是一个描述数组的类型对象。对象类型为NumPy内置的24 种数组标量类型中的一种。 (3)数组数据data:是一个指向内存中数据的指针。 (4)跨度strides:一个元组,是当前维度的宽,表示当前维度移动到下一个位置需要 跨越的字节数。跨度可以是负数,这样会使数组在内存中后向移动。 (5)数组顺序order:访问数组元素的主顺序,如“C”为行主序,“F”为列主序等。 49 2.创建ndarray 在NumPy模块中,提供了ndarray()和array()两个函数,都可以用来建立一个 ndarray。其中ndarray()函数属于底层的方法,一般情况下,建立数组使用的是更为便捷 的array()函数,其一般格式如下。 numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 主要参数: object:数组或嵌套的数列。 dtype:数组元素的数据类型,可选。 order:创建数组的样式,C为行方向,F为列方向,A 为任意方向(默认)。 ndmin:指定所生成数组应具有的最小维度。 【例3.1】 建立一个一维ndarray数组。 import numpy as np a = np.array([1,2,3]) print(a) 【例3.2】 创建二维数组。 import numpy as np a = np.array([[1,2], [3,4]]) print(a) 【例3.3】 使用ndmin参数设置数组的最小维度。 import numpy as np a = np.array([1,2,3,4,5], ndmin=2) print(a) 【例3.4】 使用dtype参数设置数组类型为复数。 import numpy as np a = np.array([1,2,3], dtype = np.complex) print(a) 在内存中,ndarray对象的存放形式是连续的一维数列。在访问时,通过索引获取内 存块中的对应元素位置。内存块以行顺序(C样式)或列顺序(F样式,即FORTRAN 或 MATLAB风格)来保存元素。 NumPy还提供了asarray()函数,可以将其他类型的结构数据转换为ndarray。 3.1.2 NumPy数据类型 NumPy内置了24种数组标量(ArrayScaler)类型,也支持Python的基本数据类型, 某种程度上可以和C 语言的数据类型相对应,如表3.1所示。 50 表3.1 NumPy的基本数据类型 名 称描 述 bool_ 布尔型,True或False int8 有符号字节类型,范围为-128~127 int16 有符号16位整数,范围为-32768~32767 int32 有符号32位整数,范围为-231~231-1 int64 有符号64位整数,范围为-263~263-1 uint8 无符号字节类型,范围为0~255 uint16 无符号16位整数,范围为0~65535 uint32 无符号32位整数,范围为0~232-1 uint64 无符号64位整数,范围为0~264-1 float_ 64位浮点数,同float64 float16 16位浮点数 float32 32位浮点数 float64 64位(双精度)浮点数,同float_ complex_ 128位复数* ,同complex128 complex64 64位复数 complex128 128位复数,同complex_ *复数:形如z=a+bi(a,b均为实数)的数称为复数,其中,a称为实部,b称为虚部,i称为虚数单位(i表示-1 的平方根)。 当虚部b=0时,复数z是实数; 当虚部b!=0且实部a=0时,复数z是纯虚数。 对于每种数据类型,NumPy还提供了同名的类型函数,例如float16()、int32()等,可 以用来创建该类型的数据对象,也可以用来转换数据对象的数据类型。 【例3.5】 NumPy数据类型的使用。 import numpy as np x=np.float32(5) print('x 为:',x) print('x 对象的data 属性: ',x.data) print('x 对象的size 属性:',x.size) print('x 对象的维数:',x.ndim) y=np.bool_(x) print('转换为bool 类型的x 为:',y) z=np.float16(y) print('True 值转换为float16 类型为:',z) 51 运行结果为: x 为: 5.0 x 对象的data 属性: <memory at 0x000002D11F41FDC8> x 对象的size 属性: 1 x 对象的维数: 0 转换为bool 类型的x 为: True True 值转换为float16 类型为: 1.0 上面的函数能够设置、修改对象数据类型。不过通常情况下,建议使用NumPy中的 dtype对象指定数据类型。 1.数据类型对象(dtype) NumPy中的dtype(datatypeobject)是由numpy.dtype类产生的数据类型对象,其 作用是描述数组元素对应的内存区域的各部分的使用。其内部结构包括数据类型、数据 的字节数、各组成部分的顺序、各字段的名称等。 构造dtype对象的语法如下。 numpy.dtype(object, align, copy) 主要参数如下。 object:要转换为dtype对象的数据对象。 align:如果为True,则填充字段使其类似C的结构体。 copy:指明是否复制dtype对象。如果为False,则是对内置数据类型对象的引用。 如果使用dtype对象设置数据类型,那么可以对例3.5做如下修改。 【例3.6】 使用dtype对象设置数据类型。 import numpy as np x=np.array(5,dtype="float32") print('x 为:',x) print('x 对象的data 属性: ',x.data) print('x 对象的size 属性:',x.size) print('x 对象的维数:',x.ndim) y=np.array(x,dtype="bool_") print('转换为bool 类型的x 为:',y) z=np.array(y,dtype="float16") print('True 值转换为float16 类型为:',z) 运行结果如下。 x 为: 5.0 x 对象的data 属性: <memory at 0x000002D11F552588> x 对象的size 属性: 1 x 对象的维数: 0 转换为bool 类型的x 为: True 52 True 值转换为float16 类型为: 1.0 有些数据类型有简写,例如int8,int16,int32,int64四种数据类型可以使用字符串 i'1',i'2',i'4',i'8'简写代替。 例如,使用“i4”字符串代替int32类型。 import numpy as np dt = np.dtype('i4') print(dt) 2.使用astype()修改数据类型 在数组建立之后,也可以使用NumPy中数组附带的astype()方法修改其数据类型, 格式如下。 array.astype(dtype,order='K',casting='unsafe',subok=True,copy=True) 例如,将y设置成float32类型,可以用: y=y.astype("float32") 或者 y=y.astype(np.float32) 另外,使用NumPy数组的astype()方法还可以把Python的数据类型映射给dtype 类型,如语句x=x.astype(float)与x=x.astype(np.float)运行结果相同。 表3.2是常用Python对象与NumPy的dtype对象的对应表,其他数据类型没有与 Python等效的数据类型。 表3.2 Python对象与dtype对象对应关系表 Python对象dtype对象 int numpy.int_ bool numpy.bool_ float numpy.float_ complex numpy.complex_ 【扩展】由于Pandas是基于NumPy数组的,所以也能用astype()对DataFrame的字 段进行类型转换。 【例3.7】 使用astype()转换DataFrame。 import pandas as pd df = pd.DataFrame([{'qty':'3', 'num':'50'}, {'qty':'7', 'num':'20'}]) print(df.dtypes) print('--------------') df['qty'] = df['qty'].astype('int') 53 df['num'] = df['num'].astype('float64') print(df.dtypes) 可以看到,两个列的数据类型由初始的object变成了float64和int32。 DataFrame 的dtypes: Num object Qty object dtype: object -------------------------- astype()转换后的dtypes: Num float64 Qty int32 dtype: object 3.1.3 NumPy数组属性 1.常用术语 (1)轴(Axis):每个线性数组称为一个轴,轴即数组的维度(Dimensions)。例如,将 二维数组看作一维数组,此一维数组中每个元素又是一个一维数组,则每个一维数组是 NumPy中的一个轴。第一个轴相当于底层数组,第二个轴是底层数组中的数组。 (2)秩(Rank):秩描述NumPy数组的维数,即轴的数量。一维数组的秩为1,二维 数组的秩为2,以此类推。 例如,[0,1,2]是一维数组,只有一个轴,其秩为1,轴长度为3;[[0,1,2],[3,4,5]]是 一个二维数组,数组的秩为2,具有两个轴,其中第一个轴(维度)的长度为2,第二个轴(维 度)的长度为3。 在使用的时候可以声明axis。如果axis=0,表示按第0轴方向操作,即对每列进行 操作;如果axis=1,表示按第1轴方向操作,即对每行进行操作。 【例3.8】 使用axis参数设置当前轴。 import numpy as np arr=np.array([[0,1,2],[3,4,5]]) print(arr) print(arr.sum(axis=0)) print(arr.sum(axis=1)) 运行结果如下。 在这个程序中,首先使用arr.sum(axis=0)进行垂直(列)方向的求和计算,然后使用 arr.sum(axis=1)沿行方向计算。 54 2.基本属性 NumPy的ndarray数组具有属性,可以获得数组的信息,常见属性见表3.3。 表3.3 常见的ndarray数组属性 属 性说 明 ndarray.ndim 秩,轴的数量 ndarray.shape 数组的维度 ndarray.size 数组元素的总个数 ndarray.dtype 数组元素类型 ndarray.itemsize 每个元素的大小(B) ndarray.data 实际数组元素 1)ndarray.ndim 在NumPy中ndarray.ndim 返回这个数组的维数,等于秩。reshape()函数可以将数 组变形重构,调整数组各维度的大小。 reshape()的格式为: numpy.reshape(a,newshape,order='C') 【例3.9】 使用reshape()函数调整数组形状。 import numpy as np arr=np.array([0, 1, 2, 3, 4, 5, 6, 7]) #显示数组arr 的rank print('秩为:',arr.ndim) arr3D = arr.reshape(2,2,2) print(arr3D) print ('秩为:',arr3D.ndim) 显示结果如下。 思考:reshape()函数是否修改原arr数组? 请使用print()函数查看。 2)ndarray.shape ndarray.shape代表数组的维度,返回值为一个元组。这个元组的长度就是ndim 属 性(秩)。另外,ndarray.shape也可以用于调整数组大小。 55 【例3.10】 显示数组的维度。 import numpy as np a = np.array([[1,2,3],[4,5,6]]) print (a.shape) 【例3.11】 调整数组大小。 import numpy as np a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2) print (a) 3)数据类型dtype 数据类型对象dtype是一个特殊的对象,包含ndarray将一块内存解析成特定数据 类型所必需的信息。 【例3.12】 创建dtype数据类型对象。 myArr=np.array([1,2,3],dtype=np.float64) myArr.dtype 查看运行结果: 3.1.4 其他创建数组的方式 ndarray数组可以使用array()函数来构造。此外,还有其他几种方式可以用来创建 特殊的数组。 1.numpy.empty() NumPy的empty()函数能创建一个指定形状、数据类型的空数组。这个数组没有经 过初始化,其内容为空。表3.4为创建空数组的参数。 格式: numpy.empty(shape, dtype = float, order = 'C') 表3.4 创建空数组的参数 参数描 述 shape 数组形状 dtype 数据类型,可选 order 有"C"和"F"两个选项,分别代表行优先和列优先,表示在计算机内存中存储元素的顺序 【例3.13】 创建一个空数组。 import numpy as np 56 x = np.empty([3,2], dtype = int) print(x) 运行后得到的数组元素值是不确定的,因为所用空间未初始化。 2.numpy.zeros() 有时需要创建全0填充的数组,此时可以使用NumPy的zeros()函数,其参数见表3.5。 格式: numpy.zeros(shape, dtype = float, order = 'C') 表3.5 创建zeros数组的参数 参数描 述 shape 数组形状 dtype 数据类型,可选 order 'C' 用于C风格———行为主的数组,或者'F' 用于FORTRAN风格———列为主的数组 【例3.14】 创建一个全0数组。 import numpy as np #默认为浮点数 x = np.zeros(5) print(x) #设置类型为整数 y = np.zeros((5,), dtype = np.int) print(y) #自定义类型 z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')]) print(z) 3.numpy.ones() 有时需要一个以1填充的数组,这时可以使用NumPy专门提供的ones()函数来 创建。格 式: numpy.ones(shape, dtype=None, order='C') 【例3.15】 建立一个全1数组。 import numpy as np #默认为浮点数 x = np.ones(5) print(x) #自定义类型 57 x = np.ones([2,2], dtype = int) print(x) 4.产生数列的函数 在进行科学运算时,经常用到基本的简单数列,如1~50等。Python中提供了range() 函数。NumPy中也有类似的函数,如arange()、linspace()函数等。 1)range()函数 Python内置的range()函数通过指定开始值、终值和步长可以创建一个一维数组。 注意,生成的数组不包括终值。 格式: range(start, stop [,step]) 所生成的数组从start开始,到stop-1结束,间隔(步长)为step。默认情况下从0 开始。step默认为1,需要是整数。 例如: arr1=range(0,5,1) 2)arange()函数 NumPy的arange()函数功能与range()函数类似,在start开始到stop的范围内,生 成一个ndarray数组。 格式: arange([start,] stop [, step,], dtype=None) 【例3.16】 生成3~9的步长为0.2的数组。 import numpy as np arr2=np.arange(3,9,0.2) arr2 运行结果如下。 3)linspace()函数 格式: numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 其中,start为序列的起始值,stop为结束值,num 是生成的样本数。 【例3.17】 生成1~5中的10个数。 import numpy as np 58 arr3=np.linspace(1, 5, 10) arr3 运行结果如下。 5.使用随机函数创建数组 除了简单的顺序数列,NumPy还在random 子模块中提供了随机函数,常见的随机 函数见表3.6。 表3.6 常用的NumPy随机函数 函 数描 述 rand(d0,d1,…,dn) 随机产生指定维度的浮点数组 randint(low[,high,size,dtype]) 随机产生[low,high]的整数 random([size]) 随机产生[0.0,1.0)的浮点数 uniform(start,end,size) 从[start,end)均匀分布的数据中随机抽取一组浮点数 normal(loc,scale,size) 基于给定的均值和方差,随机产生一组正态分布的浮点数 *正态分布(NormalDistribution):又称高斯分布,是许多统计方法的理论基础。分 布图形左右对称。正态分布的参数包括均值和标准差。同样的均值情况下,标准差越大, 曲线越平阔;标准差越小,曲线越狭窄。使用np.random.normal()函数可以生成服从正 态分布的数据。 【例3.18】 创建随机数组。 #生成2 行3 列的随机浮点数组 np.random.rand(2,3) #生成2 行2 列的10 以内的随机整数数组 np.random.randint(0,10,(2,2)) #生成2 行3 列的[1,2)的随机浮点数组 np.random.uniform(1,2,(2,3)) 6.其他数据结构转换成ndarray NumPy中可以通过array()函数,将Python中常见的数值序列,如List(列表)和 Tuple(元组)等,转换为ndarray数组。 【例3.19】 将list类型转换成ndarray。 import numpy as np #List 59 data = [[2000, 'Ohino', 1.5], [2002, 'Ohino', 3.6], [2002, 'Nevada', 2.9]] print(type(data)) #List to array ndarr = np.array(data) print(type(ndarr)) 运行结果如下。 3.1.5 切片、迭代和索引 切片是指取数据序列对象的一部分的操作,前面介绍过字符串、列表、元组都支持切 片语法。ndarray数组与其他数据序列类似,也可以进行索引、切片和迭代。 1.切片 对ndarray进行切片操作与一维数组相同,用索引标记切片的起始和终止位置即可。 因为ndarray可以是多维数组,在进行切片时,通常需要设定每个维度上的切片位置。 NumPy还提供了一个copy()方法,可以根据现有的ndarray数组创建新的ndarray 数组。使用copy()方法与切片,可以用原数组的一部分生成新数组。 【例3.20】 创建二维ndarray的切片。 import numpy as np #创建一个4 行6 列的二维数组 arr = np.arange(24).reshape(4,6) print('arr =\n',arr) #截取第2 行到最后一行、第1 列到第3 列构成的ndarray arr1 = arr[1:, :3] print('B = \n',arr1) 运行结果如下。 视频讲解 60 【例3.21】 使用numpy.copy()函数对ndarray数组进行切片复制。 import numpy as np #创建一个4 行6 列的二维数组 arr = np.arange(24).reshape(4, 6) print('arr =\n',arr) #切片复制arr 的第2 行到第4 行、第1 列到第3 列 arr2 = np.copy(arr[1:4, 0:3]) print('A = \n',arr2) #复制arr2 到arr3 arr3 = arr2.copy() print('B = \n',arr3) 2.迭代 与其他数据序列类似,ndarray也可以通过for循环实现迭代。当维数多于一维时, 迭代操作使用嵌套的for循环。 迭代时,通常按照第一条轴(默认为行)对二维数组进行扫描。如果需要按其他维度 迭代,可以使用apply_along_axis(func,axis,arr)函数指定当前处理的轴。 此外,NumPy还包含一个循环迭代器类numpy.nditer,所生成的迭代器(Iterator)对 象是一个根据位置进行遍历的对象。这是一个有效的多维迭代器对象,与Python内置 的iter()函数类似,每个数组元素可使用迭代器对象来访问,从而很方便地对数组进行 遍历。 【例3.22】 使用嵌套for循环对ndarray数组进行迭代遍历。 import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) for xline in a: for yitem in xline: print(yitem,end=' ') 运行结果如下。 0 5 10 15 20 25 30 35 40 45 50 55 【例3.23】 使用nditer对象对ndarray数组进行迭代。 import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) print(a) print(np.nditer(a)) for x in np.nditer(a): print(x,end=' ') 61 运行结果如下。 [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]] <numpy.nditer object at 0x000002D121467CB0> 0 5 10 15 20 25 30 35 40 45 50 55 迭代的顺序与数组的内容布局相匹配,不受数据排序的影响。例如,对上述数组的转 置进行迭代,可以发现,虽然数据的显示顺序发生了变化,但不影响迭代的顺序。 【例3.24】 转置数组的迭代。 import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) print(a) b = a.T print(b) print('Iterator in a:') for x in np.nditer(a): print(x,end='|') print('\nIterator in a.T:') for y in np.nditer(b): print(y,end='|') 运行结果如下。 如果需要特定的顺序,可以设置显式参数来强制nditer对象使用某种顺序,如例3.25。 【例3.25】 数组的访问顺序。 import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4) print(a) print('C 风格的顺序:') for x in np.nditer(a, order = 'C'): print(x,end='|') 62 print( '\n' ) print( 'F 风格的顺序:') for y in np.nditer(a, order = 'F'): print(y,end='|') 运行结果如下。 3.1.6 NumPy计算 NumPy中的ndarray可以直接进行基本运算,包括条件运算、统计运算,以及基本数 组运算等。 1.条件运算 NumPy中的条件运算除了常见的比较大小运算,还可以使用where()函数实现查找 操作。where()函数格式如下。 where(condition, x if true, y if false) 该函数根据条件表达式condition的值返回特定的数组。当条件为真时返回x数组, 条件为假时返回y数组。 【例3.26】 简单条件运算。 import numpy as np stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) result=[stus_score> 80] print(result) 运行结果如下。 【例3.27】 用np.where()函数实现数据筛选。 import numpy as np num = np.random.normal(0, 1, (3,4)) print(num) 63 num[num<0.5]=0 print(num) print(np.where(num>0.5,1,0)) 运行结果如下。 2.统计计算 NumPy提供了丰富的统计函数,常用统计函数如表3.7所示。 表3.7 NumPy的常用统计函数 函 数描 述 argmax() 求最大值的索引 argmin() 求最小值的索引 cumsum() 从第一个元素开始累加各元素 max() 求最大值 mean() 求算术平均值 min() 求最小值 std() 求数组元素沿给定轴的标准偏差 sum() 求和 【例3.28】 ndarray的统计计算。 import numpy as np stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) #求每列的最大值(0 表示列) result = np.max(stus_score, axis=0) print(result) #求每行的最大值(1 表示行) result = np.max(stus_score, axis=1) print(result) #求每行的最小值(1 表示行) result = np.min(stus_score, axis=1) print(result) #求每列的平均值(0 表示列) 64 result = np.mean(stus_score, axis=0) print(result) 运行结果如下。 3.2 Pandas Pandas(Python Data AnalysisLibrary)是Python 的一个数据分析包,是基于 NumPy的一种工具,是为了解决数据分析任务而创建的。 Pandas使用强大的数据结构提供高性能的数据操作和分析工具。模块提供了大量 的能便捷处理数据的函数、方法和模型,还包括操作大型数据集的工具,从而能够高效分 析数据。 Pandas主要处理以下三种数据结构。 (1)Series:一维数组,与NumPy中一维的ndarray类似。数据结构接近Python中 的List列表,数据元素可以是不同的数据类型。 (2)DataFrame:二维数据结构。DataFrame可以理解成Series的容器,其内部的每 项元素都可以看作一个Series。DataFrame是重要的数据结构,在机器学习中经常使用。 (3)Panel:三维数组,可以理解为DataFrame的容器,其内部的每项元素都可以看 作一个DataFrame。 这些数据结构都构建在NumPy数组的基础之上,运算速度很快。 3.2.1 Series数据结构 Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签 (即索引)组成,数据可以是任何NumPy数据类型(整数、字符串、浮点数、Python 对 象等)。 1.创建Series对象 创建Series对象可以使用函数pd.Series(data,index),其中,data表示数据值,index 是索引,默认情况下会自动创建一个0~N-1(N 为数据的长度)的整数型索引。访问 Series对象的成员可以使用类似ndarray数组的切片访问方法,也可以按索引名访问。 【例3.29】 创建一个Series对象。 import pandas as pd s = pd.Series([1,3,5,9,6,8]) print(s) 65 【例3.30】 为一个地理位置数据创建Series对象。 import pandas as pd #使用列表创建,索引值为默认值 print('-------- 列表创建Series ----------') s1=pd.Series([1,1,1,1,1]) print(s1) print('-------- 字典创建Series ----------') #使用字典创建,索引值为字典的key 值 s2=pd.Series({'Longitude':39,'Latitude':116,'Temperature':23}) print('First value in s2:',s2['Longitude']) print('-------- 用序列作Series 索引----------') #使用由range()函数生成的迭代序列设置索引值 s3=pd.Series([3.4,0.8,2.1,0.3,1.5],range(5,10)) print('First value in s3:',s3[5]) 运行结果如下。 -------- 列表创建Series ---------- 0 1 1 1 2 1 3 1 4 1 dtype: int64 -------- 字典创建Series ---------- First value in s2: 39 -------- 用序列作Series 索引---------- First value in s3: 3.4 2.访问Series数据对象 1)修改数据 可以通过赋值操作直接修改Series对象成员的值,还可以为多个对象成员批量修改 数据。 【例3.31】 对例3.30创建的s2,将温度增加2℃,设置城市为Beijing。 #温度增加2℃,设置城市为Beijing s2["City"]="Beijing" s2['Temperature']+=2 s2 运行结果如下。 Longitude 39 Latitude 116 66 Temperature 25 City Beijing dtype: object 2)按条件表达式筛选数据 【例3.32】 找出s3中大于2的数据。 s3[s3>2] 输出结果如下。 5 3.4 7 2.1 dtype: float64 3)增加对象成员 两个Series对象可以通过append()函数进行拼接,从而产生一个新的Series对象。 进行拼接操作时,原来的Series对象内容保持不变。 【例3.33】 为s2添加一项湿度数据。 stiny=pd.Series({'humidity':84}) s4=s2.append(stiny) print('-------原Series:-------\n',s2) print('-------新Series:-------\n',s4) 输出结果如下。 -------原Series:------- Longitude 39 Latitude 116 Temperature 25 City Beijing dtype: object -------新Series:------- Longitude 39 Latitude 116 Temperature 25 City Beijing humidity 84 dtype: object 可以看到,合并操作不影响原Series。结果中原s2数据没有变化,新创建的s4对象 接收了合并后的新数据。 4)删除对象成员 可以通过drop()函数删除对象成员,可以删除一个或多个对象成员。与append()函 数一样,drop()函数也不改变原对象的内容,而会返回一个新的Series对象。