数组
Python中并没有提供数组类型,虽然列表和元组可以代替,但是这两者都是按“对象”处理的,每个成员都需要存储引用对象值,时间和空间代价都很大,由此出现了优化的第三方扩展包,如NumPy
.
NumPy
是用C实现的并进行了一定的优化处理,最常用的是其中的数据结构ndarray
,其本质是n维数组,特殊性在于“支持通过参数dtype设置数组元素的类型”
主要特征
-
形状 shape
shape参数可以是元组也可以是列表,shape =
语句可以省略
查看形状可以用属性:shape
重构
返回一个新的数组reshape()
就地修改,更改数组本身resize()
轴调换,如矩阵转置(不改变本身):swapaxes(0,1)
多维数组转换成一维转换(不改变本身)flatten()
多维数组转换成嵌套列表(不改变本身)tolist()
-
元素类型
stype参数是numpy模块提供的数据类型(比后者多),Python本身提供的类型也可以,dtype =
语句可以省略
同一个数组中,所有元素的数据类型必须一致,如果不一致或没有显式定义元素数据类型,则按 dtype = object 处理
设置dtype参数值,用户可以自定义元素类型
使用方法astype()
可以重设数组元素类型,并返回一个新数组,原数组没有改变
创建
首先要导入numpy包import numpy as np
- 用
np.arange()
arange()和 range()使用的方法差不多,但是range是Python内置函数,返回值为range对象,而arange是函数,返回值为NumPy的arrary - 用
np.array()
np.ones() np.zeros
np.full()
创建相同元素的数组np.random()
生成随机数组
如图,方一方二不支持定义形状
切片
规则切片:参考序列切片方式
Fancy Indexing不规则切片:在下标中可以出现另一个[ ],直接读取指定下标的元素,也可以出现包含数组名本身的“过滤条件”
切片时可能需要生成一个特殊矩阵:“特征矩阵”array[:,np.newwaxis]
规整化处理特征矩阵
查看形状用属性shape
更改形状用方法reshape()
计算
属性计算
- 计算数组的秩:
ndim
属性模式和方法模式都可以 - 计算数组元素的个数:
.size
方法计算
- 乘法:*
- 横向 / 纵向拆分:
split() vsplit()
- 合并
concatenate()
- 横向 / 纵向合并:
vstack() hstack()
前提:列 / 行个数一样 - 元素另外加(不改变本身)
np.add()
- 数组内元素相加(不改变本身)
np.sum()
插入和删除
删除特定元素:np.delete(array,obj,axis)
array:需要处理的矩阵
obj:需要处理的位置,比如要删除的第一行或者第一行和第二行
axis:如果输入为None:array会先按行展开,然后按照obj,删除第obj-1(从0开始)位置的数,返回一个行矩阵。
如果输入为0:按行删除
如果输入为1:按列删除
插入特定元素:np.insert(目标数组,下标,待插入元素)
缺失值处理
判断每个元素是否为缺失值:isnan()
判断是否至少有一个缺失值:any()
判断是否所有元素都为缺失值:all()
还有其他用法
缺失值处理
一般用NaN-Safty函数nansum()
None是基础语法提供的特殊数据类型,不能参加算术运算
np.nan是numpy提供的数据类型,属于float类型,可以参加算术运算
排序
返回排序结果:sort()
返回排序后的下标:argsort()
多维数组按指定维度排序:在sort()中加一个轴参数axis
axis = 1:
计算前后行数不变
2.以行为单位,每行独立计算
3.逐行计算
axis = 0:把行换成列
拷贝
浅拷贝:引用,共享存储空间array1 = array2
深拷贝:复制,两个不同的数组array2 = array1.copy()
随机数
一次生成一个随机数
生成随机数需要用到random
模块,常用的还有NumPy、SciPy等包
需要设置种子数random.seed( )
,如果不设置,每次的随机数都会不一样
生成一个随机整数:randint()
生成一个随机实数:uniform()
一次生成一个随机数组
基本步骤:
第一步:通过np.random.RandomState
定义一个随机变量的生成器
第二步:根据目标数组的特征选择具体方法
- 普通随机矩阵:
rand.randint(start,stop,(shape))
- 服从均匀分布:
rand.rand( size) *10
rand()
的返回值的取值范围为[0,1],*10是为了调整取值范围 - 服从正态分布:
rand.randn( size) + 5
+5理由同上 - 生成等距数列
np.linspace(start,stop,size)
没有用生成器
Series
Pandas包提供了一中key-value型的数据类型,其中key为用户自定义的显式index,Series与列表的区别在于,Series的每个元素有显式(自定义)和隐式(系统自动分配)两种index
定义
用pd.Series()
函数,函数参数包括:
data参数:对应values,取值为字典、列表等
index参数:对应显式index,取值为字典列表等
value的长度应当和index长度相等,如果不匹配就会报ValueError(书上说如果data中只有1个元素,系统支持循环补齐,但是敲代码不太行)
操作
- 查看显式index部分:属性
index
- 查看values部分:属性
values
- 可以通过显式index查看元素,支持切片,但key一定要带引号
- 更新显式index的方法:
reindex()
不改变本身,更新index只是调整次序,如果出现新的key则对应的value为NaN缺失值