2.3 NumPy
NumPy是Python的一个高性能矩阵运算的科学计算库。它的主要用途是以数组的形式进行数据操作和数学运算,数据分析、机器学习大都是进行数学计算。Pandas依赖NumPy,在安装它时会自动安装NumPy。Pandas的数据结构和运算的底层工作都交由NumPy来完成。但是,我们不需要过多关注NumPy的功能,直接使用Pandas的功能就可以,也不需要从NumPy的基础开始学习,这部分内容可以跳过,在学习过程中有需要再来查看。
2.3.1 NumPy简介
NumPy(官网https://numpy.org)是Python的科学计算包,代表Numeric Python。NumPy是Python中科学计算的基本软件包。它是一个Python库,提供多维数组对象以及蒙版数组和矩阵等各种派生对象,用于对数组进行快速便捷的操作,包括数学、逻辑、形状处理、排序、选择、I/O、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等。可以说,NumPy是数据科学中必不可少的工具。
由于NumPy对数据进行向量化描述,没有任何显式的循环操作,所以执行速度更快,代码更加简洁优雅,出错率更低。NumPy提供了两个基本的对象。
- ndarray:存储数据的多维数组。
- ufunc:对数组进行处理的函数。
2.3.2 数据结构
NumPy的ndarray提供了一维到三维的数据结构,图2-2所示为同构数据多维容器,所有元素必须是相同类型。我们经常用到的是一维和二维数组。
图2-2 NumPy的数据结构图示
ndarray对数据向量化,利用隐式逐元素方式的广播机制进行算术运算、逻辑运算、位运算、函数调用等,可以快速、批量地处理数据。
2.3.3 创建数据
使用NumPy需要先导入,约定俗成地为它起别名np。使用np.array可传入一个元组或列表。如果是二维数据,可以是由列表组成的列表或由元组组成的列表等形式。
import numpy as np np.array([1, 2, 3]) np.array((1, 2, 3)) # 同上 # array([1, 2, 3]) np.array(((1, 2),(1, 2))) np.array(([1, 2],[1, 2])) # 同上 ''' array([[1, 2], [1, 2]]) '''
以下是一些常见的数据生成函数。
np.arange(10) # 10个,不包括10,步长为1 np.arange(3, 10, 0.1) # 从3到9,步长为0.1 # 从2.0到3.0,生成均匀的5个值,不包括终值3.0 np.linspace(2.0, 3.0, num=5, endpoint=False) # 返回一个6×4的随机数组,浮点型 np.random.randn(6, 4) # 指定范围、指定形状的数组,整型 np.random.randint(3, 7, size=(2, 4)) # 创建值为0的数组 np.zeros(6) # 6个浮点0. np.zeros((5, 6), dtype=int) # 5×6整型0 np.ones(4) # 同上 np.empty(4) # 同上 # 创建一份和目标结构相同的0值数组 np.zeros_like(np.arange(6)) np.ones_like(np.arange(6)) # 同上 np.empty_like(np.arange(6)) # 同上
2.3.4 数据类型
由于Pandas中的数据类型部分继承了NumPy的数据类型,所以我们需要了解一下NumPy的常见类型。
np.int64 # 有符号64位整型 np.float32 # 标准双精度浮点类型 np.complex # 由128位的浮点数组成的复数类型 np.bool # bool类型(True或False) np.object # Python中的object类型 np.string # 固定长度的string类型 np.unicode # 固定长度的unicode类型 np.NaN # np.float的子类型 np.nan
2.3.5 数组信息
以下是一些获取数组信息的常用方法。
n.shape() # 数组的形状,返回值是一个元组 n.shape = (4, 1) # 改变形状 a = n.reshape((2,2)) # 改变原数组的形状,创建一个新数组 n.dtype # 数据类型 n.ndim # 维度数 n.size # 元素数 np.typeDict # np的所有数据类型
2.3.6 统计计算
两个数组间的操作采用行列式的运算规则,示例如下。
np.array([10, 20, 30, 40])[:3] # 支持类似列表的切片 a = np.array([10, 20, 30, 40]) b = np.array([1, 2, 3, 4]) a+b # array([11, 22, 33, 44])(矩阵相加) a-1 # array([9, 19, 29, 39]) 4*np.sin(a) # 以下是一些数学函数的例子,还支持非常多的数学函数 a.max() # 40 a.min() # 10 a.sum() # 100 a.std() # 11.180339887498949 a.all() # True a.cumsum() # array([10, 30, 60, 100]) b.sum(axis=1) # 多维可以指定方向
2.3.7 小结
由于Pandas调试依赖NumPy库,我们需要了解基础的NumPy数据类型和操作。不过不用担心,Pandas已经帮助我们封装好了各种计算,可以等到遇到涉及NumPy底层功能的内容时,再来学习查询。