dtcms 源码 Angular mfc HTTP请求 selenium flask pip bitmap jackson Material UI 后台模板 sql数据库教学视频 网赚视频教程 short几个字节 bitlocker加密好慢 solr索引 mysql分页查询sql语句 centos查看python版本 如何升级python spring源码下载 matlab网页版 python高级教程 python命令 java中string java斐波那契数列 java中的正则表达式 java使用正则表达式 java自学编程入门教程 java面向对象 java的框架 java网课 java抛出自定义异常 java的特性 linux的find 超级煎蛋卷 手机照片恢复免费软件 pr黑场过渡 unity3d下载 圆角矩形工具改变弧度 正当防卫4存档
当前位置: 首页 > 学习教程  > python

python如何求一个矩阵里非nan数据的最大值_Python学习第三步:多维数组和数据清洗的基本过程...

2021/2/6 22:27:32 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

一、多维数组(一)NumPy(Numerical Python) 导入NumPy,import numpy as np1、NumPy特点:高性能科学计算和数据分析的基础包,提供多维数组对象ndarray,多维数组(矩阵),具有矢量运算能力&#xff0…

一、多维数组

(一)NumPy(Numerical Python)

导入NumPy,import numpy as np

1、NumPy特点:

  • 高性能科学计算和数据分析的基础包,提供多维数组对象
  • ndarray,多维数组(矩阵),具有矢量运算能力,快速、节省空间
  • 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
  • 线性代数、随机数生成

补充:

  • SciPy,import scipy as sp
  • 在NumPy库的基础上增加了众多的数学、科学及工程常用的库函数
  • 线性代数、常微分方程求解、信号处理、图像处理、稀疏矩阵等

2、NumPy数据结构

ndarray,N维数组对象(矩阵)

  • ndim属性,维度个数
  • shape属性,各维度大小
  • dtype属性,数据类型

5cdce51e98f709f0bd7f1025dea17557.png

3、多维数组的创建

  • np.array(collection),collection为序列型对象(list),嵌套序列(list of list)
l = [1,2,3,4,5,6]
data = np.array(l)
print(data)
print('维度个数:',data.ndim)
print('各维度大小:',data.shape)
print('数据类型:',data.dtype)
>>>[1 2 3 4 5 6]
   维度个数:1
   各维度大小:(6,)
   数据类型:int32
  • np.zeros(), np.ones() 指定大小的全0或全1数组
    • 注意:第一个参数是元组,用来指定大小,如(3,4)
zeros_arr = np.zeros((2,3))
ones_arr = np.ones((2,2))
print(zeros_arr)
print(ones_arr)
>>>[[0. 0. 0.]
    [0. 0. 0.]]
   [[1. 1.]
    [1. 1.]]
  • np.random.rand(),生成指定形状的随机数组
rand_arr = np.random.rand(2,2)
print(rand_arr)
>>>[[0.03744583 0.77484823]
    [0.18944974 0.76420786]]
  • np.arange(),类似range函数,生成等差数组序列
arr = np.arange(10)
print(arr)
>>>[0 1 2 3 4 5 6 7 8 9]
  • 转换形状,reshape()
  • 转换数据类型,astype()
arr2 = arr.reshape((2,5))
print(arr2)
>>>[[0 1 2 3 4]
    [5 6 7 8 9]]
print(arr2.dtype)
>>>int64
arr3 = arr2.astype(float)
print(arr3.dtype)
>>>float64
  • 4、多维数组操作

索引与切片

  • 一维数组的索引与Python的列表索引功能相似
  • 多维数组的索引
  • arr[r1:r2, c1:c2]
  • arr[1,1] 等价 arr[1][1]
  • [:] 代表某个维度的数据

c11c2cff489b90121b410c9bbda949e0.png

条件索引

  • 布尔值多维数组 arr[condition] condition可以是多个条件组合
  • 注意,多个条件组合要使用 & |,而不是and or
is_arr = arr2 > 4
print(is_arr)
>>>[[False False False False False]
     [ True  True  True  True  True]]
print(arr2[is_arr])
>>>[5 6 7 8 9]

64a4a5e2df6a5d99534f301af36cbf2d.png

转置

  • T
  • np.transpose()
  • 交换轴的位置 np.swapaxes()
print(arr2.T)
>>>[[0 5]
    [1 6]
    [2 7]
    [3 8]
    [4 9]]
arr4 = arr2.T
print(np.transpose(arr4))
>>>[[0 1 2 3 4]
    [5 6 7 8 9]]
arr5 = np.transpose(arr4)
print(np.swapaxes(arr5,0,1))
>>>[[0 5]
    [1 6]
    [2 7]
    [3 8]
    [4 9]]

1f719d2ad27a5f26c7a188914f74ba72.png

17d0fc14882646bd9068ccb7ca97a624.png

5、NumPy的常用方法

常用统计方法

  • 求均值:np.mean(),求和:np.sum(),
  • 求最大:np.max(),求最小:np.min()
  • 求标准差:np.std(), 求方差:np.var()
  • 求最大值的索引:np.argmax(),求最小值的索引:np.argmin()
  • 求累加:np.cumsum(),求累乘:np.cumprod()

常用方法

  • 是否所有元素满足条件:np.all()
  • 是否至少一个元素满足条件:np.any()
  • 求唯一值并返回排序结果:np.unique()
  • 注意:
    • 默认是全部维度上做统计
    • 多维数组要指定统计的维度
  • 更多参考:
    Statistics - NumPy v1.17 Manual

6、向量化 (vectorization)

  • 获得执行速度更快、更紧凑的代码策略
  • 基本思路:“一次”在一个复杂对象上进行操作, 或者向其应用某个函数,而不是通过在对象的单个元素上循环来进行
  • 在NumPy级别上,在ndarray对象上进行的循环,由经过高度优化的代码负责,大部分代码用C语 言编写,远快于纯Python

广播

  • 相同形状的数组间的运算应用在元素上
  • 不同形状的数组运算,进行“广播”操作

c4ebadb2129ed4a42ba255212d5a23a9.png

ufunc 通用函数

元素级运算
常用的通用函数

  • ceil(), 向上最接近的整数
  • floor(), 向下最接近的整数
  • rint(), 四舍五入
  • isnan(), 判断元素是否为 NaN(Not a Number)
  • multiply(),元素相乘,等同于数组的 * 操作(注意,不是矩阵的乘法操作)
  • divide(), 元素相除,等同于数组的 / 操作

(二)Pandas:Series、DataFrame

Pandas
• 一个强大的分析结构化数据的工具集
• 2008年创建,最初被作为金融数据分析工具 • 基础是NumPy,提供了高性能矩阵的运算

1、数据结构 -- Series
• 类似一维数组的对象

构建Series数据:

  • 通过数组/列表
  • 通过dict

预览数据:ser_obj.head()

获取索引:ser_obj.index

Series的名称:ser_obj.name

Series索引的名称:ser_obj.index.name

根据数据类型自动处理缺失数据:如object -> None, float -> NaN

仍然可以使用NumPy中的向量化操作

获取数据:

  • 获取所有数据:ser_obj.values
  • 依据名称获取Series中的某些值:ser_obj[‘idx_name’], 或 ser_obj.loc[‘idx_name’],其中假设了ser_obj的索引由”idx_name”组成。
  • 依据索引位置获取Series中的某些值,ser_obj.iloc[idx],其中idx是整形的。

2、数据结构 -- DataFrame

DataFrame数据结构

  • 类似多维数组/表格数据
  • 每列数据可以是不同的类型
  • 索引包括行索引(index)和列索引(label/column)

4c93103f80cea1e77380b86895e473d5.png

DataFrame的构建及操作

构建DataFrame

  • 通过ndarray/列表
  • 通过dict

获取列数据(Series类型 ):df_obj[label] 或 df_obj.label

增加列数据:df_obj[new_label] = data

删除列:

  • df_obj.drop(columns=[],inplace=False),当inplace=False时,原数据不会改变,否则在原数据上发生改变。
  • del df_obj[col_idx]

3、Index

Index对象:Series和DataFrame中的索引都是Index对象

Index对象的特征:不可变(immutable) ,保证了数据的安全

常见的Index种类:

  • Index
  • Int64Index
  • MultiIndex,“层级”索引
  • DatetimeIndex,时间戳类型

Index对象重置索引:

  • reset_index(drop),将索引重新赋值为0-1
  • 参数drop,为True表示丢弃原来的索引列,默认为False

4、Series的索引操作

  • 行索引:按索引位置:ser_obj[pos];按索引名称:ser_obj[‘label’]
  • 切片索引:按索引位置:ser_obj[2:4];按索引名称:ser_obj[‘label1’: ‘label3’]
  • 注意,按索引名切片操作时,是包含终止索引的。
  • 不连续索引:ser_obj[ [‘label1’, ‘label2’, ‘label3’] ];ser_obj[ [pos1, pos2, pos3] ]

5、DataFrame的索引操作

  • 列索引:df_obj[‘label’]
  • 不连续列索引:df_obj[ [‘label1’, ‘label2’] ]
  • 行索引:和Series的索引类似,.loc[ ],iloc[ ]
  • 混合索引:先行后列,先列后行
  • Pandas中的很多操作都有参数inplace,如 drop(),replace() ...
  • 默认 inplace=False,表示将操作后的结果进行返回,对原始数据不会产生影响
  • inplace=True,没有返回值,在原始数据上进行操作,对原始数据会产生影响

6、索引操作总结

Pandas的索引可归纳为3种

  • .loc,标签索引
  • .iloc,位置索引

loc与iloc主要用于行索引,其中,使用名称/标签的切片索引是包含末尾位置的。

  • 注意
  • DataFrame索引时可将其看作ndarray操作
  • 标签的切片索引是包含末尾位置的

布尔值遮罩(Boolean Mask):对应位置为True的时候,则取得该数据。

7、运算与对齐

pandas可以对不同索引的对象进行算术运算

  • 索引与数据的对应关系仍保持在数组运算的结果中
  • 如果没对齐的位置则补NaN
  • 对于Series,对齐操作会发生在索引上
  • 对于DataFrame,对齐操作会同时发生在行和列上
  • Series和DataFrame操作时,Series被看作行数据(index被看作列),和DataFrame中的每行数据进行计算。

Series的运算:对齐操作发生在索引上

DataFrame的运算:

  • 对齐操作会同时发生在行和列上,
  • Series和DataFrame操作时,Series被看作行数据(index被看作列),和DataFrame中的每行数据进行计算。

Series和DataFrame的对齐和运算方式:

  • 索引与数据的对应关系仍保持在数组运算的结果中。
  • 若是没有对齐的位置,则运算结果位置默认补NaN

二、数据分析基本过程:

提出问题->理解数据->数据清洗->构建模型->数据可视化

(一)数据清洗的基本过程:

  • 选择子集、列名重命名、缺失数据处理、数据类型转换、数据排序、异常值处理

缺失数据处理:

  • 判断是否存在缺失值,ser_obj.isnull(), df_obj.isnull(),可以结合any()判断行/列中是否存在缺失值
  • 丢弃缺失数据:dropna()
  • 填充缺失数据:fillna(value),以value填充数据
    ffill()和bfill(),项目中使用ffill()或bfill()时,注意数据的排列顺序
    df.ffill()或者df.fillna(method=”ffill”),按之前的数据填充
    df.bfill()或者df.bfill(method=”bfill”),按之后的数据填充
  • axis:默认axis=0,0表示以垂直方向进行操作,也就是按照列索引中的每列数据进行操作,1表示在水平方向进行操作,也就是按照行索引中的每行数据进行操作。

重复值

  • duplicated(subset) 返回布尔型Series,表示每行是否为重复行
  • drop_duplicates(subset, keep) 过滤重复行,是对subset中的数据进行重复行过滤
  • 默认判断全部列,可通过参数subset指定某些列
  • keep,默认(first)保留第一次出现的数据,last表示保留重复行的最后一行

df.replace(to_replace),参数to_replace为可以是:

  • 数值,字符串:需要替换的值,新的值,比如to_replace=23,45,表示将df数据中的23替换为45
  • 列表:第一个列表中的元素是需要被替换掉的值,第二个列表中的元素是新的值。两个列表需要一一对应。
  • 字典,键是需要被替换掉的值,值为新的值

(二)常用统计方法

describe():快速查看每列数据的统计信息,以下是可以输出的统计指标

  • count,数据个数(非空数据)
  • mean,均值
  • std,标准差
  • min,最小值
  • 25%,第1四分位数,即第25百分位数
  • 50%,第2四分位数,即第50百分位数
  • 75%,第3四分位数,即第75百分位数
  • max,最大值

quantile(q):输出指定位置的百分位数,默认q=0.5,q的范围是[0,1]

  • sum(),求和
  • mean(),求均值
  • median(),求中位数
  • count(),求非空的个数
  • max(),求最大值
  • min(),求最小值
  • idxmax(),返回最大值对应的索引
  • idxmin(),返回最小值对应的索引
  • mad(),求平均绝对误差(mean absolute deviation),对表示各个变量值之间差异程度的数值之一
  • var():方差
  • std():求标准差
  • cumsum(),求累加
相关资源:微信小程序源码-合集6.rar

本文链接: http://www.dtmao.cc/news_show_2000117.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?