Python 数据加工篇| 数组、随机数、Series

数组

Python中并没有提供数组类型,虽然列表和元组可以代替,但是这两者都是按“对象”处理的,每个成员都需要存储引用对象值,时间和空间代价都很大,由此出现了优化的第三方扩展包,如NumPy.

NumPy是用C实现的并进行了一定的优化处理,最常用的是其中的数据结构ndarray,其本质是n维数组,特殊性在于“支持通过参数dtype设置数组元素的类型”

主要特征
  1. 形状 shape
    shape参数可以是元组也可以是列表,shape =语句可以省略
    查看形状可以用属性:shape
    重构
    返回一个新的数组reshape()
    就地修改,更改数组本身resize()
    轴调换,如矩阵转置(不改变本身):swapaxes(0,1)
    多维数组转换成一维转换(不改变本身)flatten()
    多维数组转换成嵌套列表(不改变本身)tolist()

  2. 元素类型
    stype参数是numpy模块提供的数据类型(比后者多),Python本身提供的类型也可以,dtype =语句可以省略
    同一个数组中,所有元素的数据类型必须一致,如果不一致或没有显式定义元素数据类型,则按 dtype = object 处理
    设置dtype参数值,用户可以自定义元素类型
    使用方法astype()可以重设数组元素类型,并返回一个新数组,原数组没有改变
    1

创建

首先要导入numpy包import numpy as np

  1. np.arange()
    arange()和 range()使用的方法差不多,但是range是Python内置函数,返回值为range对象,而arange是函数,返回值为NumPy的arrary
  2. np.array()
  3. np.ones() np.zeros
  4. np.full()创建相同元素的数组
  5. np.random()生成随机数组
    1
    如图,方一方二不支持定义形状
切片

规则切片:参考序列切片方式
Fancy Indexing不规则切片:在下标中可以出现另一个[ ],直接读取指定下标的元素,也可以出现包含数组名本身的“过滤条件”
2

切片时可能需要生成一个特殊矩阵:“特征矩阵”array[:,np.newwaxis]
规整化处理特征矩阵
查看形状用属性shape
更改形状用方法reshape()

计算

属性计算

  • 计算数组的秩:ndim
    属性模式和方法模式都可以
  • 计算数组元素的个数:.size

方法计算

  • 乘法:*
  • 横向 / 纵向拆分:split() vsplit()
  • 合并concatenate()
  • 横向 / 纵向合并:vstack() hstack()
    前提:列 / 行个数一样
  • 元素另外加(不改变本身)np.add()
  • 数组内元素相加(不改变本身)np.sum()
    3
插入和删除

删除特定元素:np.delete(array,obj,axis)
array:需要处理的矩阵
obj:需要处理的位置,比如要删除的第一行或者第一行和第二行
axis:如果输入为None:array会先按行展开,然后按照obj,删除第obj-1(从0开始)位置的数,返回一个行矩阵。
如果输入为0:按行删除
如果输入为1:按列删除
插入特定元素:np.insert(目标数组,下标,待插入元素)

缺失值处理

判断每个元素是否为缺失值:isnan()
判断是否至少有一个缺失值:any()
判断是否所有元素都为缺失值:all()
还有其他用法
3

缺失值处理
一般用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缺失值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值