Numpy
矩阵计算和操作
矩阵用空格隔开,不是逗号
可以直接通过下标索引(从0开始),第一个是行,第二个是列
可以通过切片遍历
# 导入包
import numpy as np
# 转换为矩阵
array = np.array([[1,2,3],[2,3,4]])
# 输出矩阵
print(array)
# 输出矩阵的维度(一维矩阵还是二维矩阵)
print(array.ndim)
# 输出矩阵的列数和行数
print(array.shape)
# 输出矩阵的大小(一共有多少元素)
print(array.size)
-
定义一个矩阵
-
自定义内容(np.array)
array = np.array([[1,2,3],[2,3,4]])
-
循环定义有序(np.arange(起点,终点,步长))
# 起点,终点,步长 # 一个参数,默认从0-n,步长1 # 生成从 10 开始,20 结束,步长为 2 的有序矩阵 a = np.arange(10,20,2) # 生成从 0 开始,12 结束,有序矩阵,定义为 3 行 4 列 a = np.arange(12).reshape((3,4))
-
随机矩阵(np.random.random(行数,列数))
# 生成一个随机矩阵,定义为2行4列 a = np.random.random((2,4))
-
-
输出矩阵的维度(ndim)
# 输出矩阵的维度(一维矩阵还是二维矩阵) print(array.ndim)
-
输出矩阵的大小(行数和列数 shape)
# 输出矩阵的列数和行数 print(array.shape)
-
输出矩阵包含的元素数(size)
# 输出矩阵的大小(一共有多少元素) print(array.size)
-
定义矩阵的数据类型(dtype)
使用 dtype 参数定义矩阵的数据类型
int64 int32 float62 float32
位数越小,占空间越小,位数越多,占空间越多
a = np.array([2,23,4],dtype=np.int)
-
生成一个全0 全1矩阵(zeros、ones)
# 生成全为 0 的 3 行 4 列的矩阵 a = np.zeros((3,4)) print(a) # 生成全为 1 的 3 行 4 列的矩阵 a = np.ones((3,4))
-
定义生成矩阵的大小(列数和行数 reshape((行数,列数)) )
# 生成从 0 开始,12 结束,有序矩阵,定义为 3 行 4 列 a = np.arange(12).reshape((3,4))
-
基础运算
-
a+b(逐个相加)
-
a-b(逐个相减)
-
a*b(逐个相乘)
-
np.dot(a,b) 或 a.dot(b) (矩阵乘法)
-
a**3(a矩阵的3次方)
-
np.sin(a)(sin)
-
np.cos(a)(cos)
-
np.tan(a)(tan)
-
np.sum(a)(矩阵求和)
-
np.mean(a)(矩阵平均值)
-
np.max(a)(矩阵最大值)
-
np.min(a)(矩阵最小值)
-
np.median(a)(矩阵中位数)
-
np.cumsum(a)(矩阵前缀和)
-
np.diff(a)(矩阵相邻两数的差)
-
np.sort(a)(对矩阵进行排序,逐行排序)
-
np.min(a,axis=0)(每一列的最小值)
-
np.min(a,axis=1)(每一行的最小值)
# 基础运算 a = np.array([10,20,30,40]) b = np.arange(4) print(a,b) print(a+b) print(a-b) print(b**3) # b矩阵的3次方 几次方用**几来运算 # 求sin,cos,tan print(np.sin(a)) print(np.cos(a)) print(np.tan(a)) # 求符合某个条件的数,返回一个01列表 print(b<3) # 矩阵运算 a = np.array([[1,1], [0,1]]) b = np.arange(4).reshape((2,2)) print(a) print(b) # 逐个相乘,每个位置上对应相乘 print(a*b) # 矩阵乘法 print(np.dot(a,b)) print(a.dot(b)) # 生成一个随机矩阵,定义为2行4列 a = np.random.random((2,4)) print(a) # 矩阵的求和,平均值,最大值,最小值 # sum,mean,min,max print(np.sum(a)) print(np.mean(a)) print(np.min(a)) print(np.max(a)) # 每一列的最小值 print(np.min(a,axis=0)) # 每一行的最小值 print(np.min(a,axis=1))
-
-
求符合某个条件的数,返回一个True/False列表
# 返回b中小于3的列表 print(b<3)
-
求矩阵中最大值和最小的索引(下标) —— argmin,argmax
a = np.arange(2,14).reshape((3,4)) print(a) # 求矩阵中最大最小的索引(下标) # argmin,argmax print(np.argmin(a)) print(np.argmax(a))
-
矩阵行列转换(transpose和.T)
# 对矩阵进行行列转换 a = np.arange(3,15) print(np.transpose(a)) print(a) print(a.T) # 行列转换
-
将矩阵大于某一个数的和小于某一个数的数进行赋值(clip)
# 将矩阵大于9的数变成9 小于5的数变成5 print(np.clip(a,5,9))
-
循环
for row in a: print(row) for row in a.T: print(row) print(a.flatten()) # flat是循环的迭代器 # flatten返回的是一行列表 for item in a.flat: print(item)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AxEJmDqN-1647536478792)(assets/image-20220313144713-6djae3m.png)]
-
合并
-
上下合并 np.vstack((a,b))
-
左右合并 np.hstack((a,b))
-
加维度,给每一个加一个【】 a[:,np.newaxis]
-
维度合并
# 合并array # 按行、列合并 a = np.array([1,1,1]) b = np.array([2,2,2]) # 上下合并 print(np.vstack((a,b))) c=np.vstack((a,b)) # 左右合并 print(np.hstack((a,b))) # 加维度,给每一个加一个【】 print(a[:,np.newaxis]) a = np.array([1,1,1])[:,np.newaxis] b = np.array([2,2,2])[:,np.newaxis] # 纵向合并 c = np.concatenate((a,b,b,a)) print(c) # 纵向合并 定义维度 c = np.concatenate((a,b,b,a),axis=1) print(c)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRBlBRn9-1647536478794)(assets/image-20220313145048-4mj7blo.png)]
-
-
分割
-
平均分割
-
不平均分割
# numpy array 分割(纵向分割和横向分割) a = np.arange(12).reshape((3,4)) print("a=") print(a) # 将a矩阵纵向平均分割为2块 print(np.split(a,2,axis=1)) # 横向平均分割3块 print(np.split(a,3,axis=0)) # 纵向不平均分割3块 print(np.array_split(a,3,axis=1)) # 纵向分割函数 print(np.vsplit(a,3)) # 横向分割函数 print(np.hsplit(a,2))
-
-
复制
-
浅复制(随着发生改变)
-
深复制(不随着发生改变)
# numpy的复制,复制后是同时改变的,全局变量,相关联 a = np.arange(4) print(a) b=a c=a d=b a[0]=11 print(b) print(d) print(a) # 判断两个是否相等 a is b 写is就行了 返回true or false d[1:3]=[22,33] # 将下标1-(3-1)的值赋为22和33 # 不关联的赋值 b=a.copy()# deep copy 深度赋值 print(b) a[0]=44 print(b) print(a)
-
Pandas
导入所需库(numpy、pandas)和数据集(train)
# 导入库
# 将 numpy 和 pandas 导入并命名为np、pd
import numpy as np
import pandas as pd
数据类型介绍
- Series 是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引index)组成 索引在左边,值在右边。可以通过给index赋值,自定义索引
- DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
导入导出数据
操作 | 代码 |
---|---|
相对路径导入 cvs 数据 names 参数 自定义列名 header 参数 是否隐藏原始列名(0隐藏,默认1) index_col 参数 定义行索引名 encoding 参数 定义编码类型(GBK、utf-8) | df = pd.read_csv('train.csv') df = pd.read_csv('train.csv', names=['列名1','列名2','列名3'],index_col='行索引名',header=0) |
另存为 cvs 数据 | df.to_csv('表名.csv') |
观察数据的操作
操作 | 代码 |
---|---|
查看数据的基本信息 每一列的非空值的个数、数据类型、文件大小 | df.info |
查看(数值型的列)描述性统计信息 count : 样本数据大小 mean : 样本数据的平均值 std : 样本数据的标准差 min : 样本数据的最小值 25% : 样本数据25%的时候的值 50% : 样本数据50%的时候的值 75% : 样本数据75%的时候的值 max : 样本数据的最大值 | df.describe() |
查看数据的形状 行数、列数 | df.shape |
查看DataFrame数据的列名、其数据类型 返回一个Index | df.columns |
查看DataFrame数据的行名、行索引名、行数 返回一个Index | df.index |
查看数据的前 N 行 n 默认为 5 | df.head() |
查看数据的后 N 行 n 默认为 5 | df.tail(N) |
设置最多显示N列 设置最多显示N行 | pd.options.display.max_columns=N pd.options.display.max_rows=N |
查询数据占用内存(B) | df.memory_usage() |
观察数据是否有空值 返回一个True/False序列 | df.isnull() |
查看某一列的值 查看一些列 | df['列名'] df['列名1','列名2','列名3'] |
查询某些行某些列的值 | df.loc[[行名1,行名2,行名3],['列名1','列名2','列名3']] |
隐藏一些列,查看其他列 隐藏一些行,查看其他行 | df.drop(['列名1','列名2','列名3'],axis=1) df.drop(['行名1','行名2','行名3'],axis=0) |
设置单个筛选条件并查询 设置多个筛选条件并查询 | df[df["列名"]判断条件] df[(df["列名"]判断条件0)& (df["列名"]判断条件)] |
列的最大值 列的最小值 列的总和 ()内可以放入表达式,要求返回值是Series | max(df['列名']) min(df['列名']) df['列名'].sum() |
操作数据的操作
操作 | 代码 |
---|---|
删除某一列 删除多个列 | del df['列名'] del df['列名1','列名2','列名3' |
重建行索引 drop 参数 是否保留原行索引,True不保留 | df.reset_index(drop=True) |
索引排序 axis 参数 1列0行 ascending 参数 True 升序 False 降序 | df.sort_index(axis=1, ascending=False) 列索引降序排序 |
值排序 ascending 参数 True 升序 False 降序 多个列排序时,按先后顺序,前相等时,按后排序 | df.sort_values(by=['列名', '列名'], ascending=False) |
两列相加 一一对应相加,返回一列 | df['列名'] + df['列名'] |
删除包含缺失值的 行 或 列 返回不包含缺失值的DataFrame 返回不包含缺失值的Series how 参数 all 全部为空缺值的行才丢弃 axis 参数 0行1列 默认0 | df.dropna() df.dropna(how='all') df.dropna(axis=1, how='all') |