文章目录
- 1.生成数组,设置指定的数据类型,输出0-10的数据,步长为2,调整数据类型
- 2.一二三维数组,更改数组形状,在不知道t5元素个数的情况下,将其变成1维数组,数组的计算函数
- 3.读取csv文件,进行转置方法
- 4.读取csv文件取不连续的行,列
- 5.下面的方式对numpy设置值
- 6.数组的拼接
- 7.数组的行列交换
- 8.两个表格合并拼接案例
- 9.输出特殊数组
- 10.numpy生成随机数
- 11.生成均匀分布,生成正太分布
- 12.统计数据是nan的数据个数,统计数据非0的数据个数,将数据是nan的替换为0
- 13.将有nan的数据通过均值进行填充
1.生成数组,设置指定的数据类型,输出0-10的数据,步长为2,调整数据类型
import numpy as np
import random
#生成数组
t1 = np.array([1,2,3,4])
print(t1,type(t1),t1.dtype) #输出:[1 2 3 4] <class 'numpy.ndarray'> int32
#设置指定的数据类型
t1 = np.array(range(1,4),dtype=float)
print(t1,t1.dtype) #输出:[1. 2. 3.] float64
t1 = np.array(range(1,4),dtype="float32")
print(t1,t1.dtype) #输出:[1. 2. 3.] float32
t1 = np.array([1,0,1,1,0],dtype=bool)
print(t1)#输出:[ True False True True False]
t1 = np.array(range(10))
print(t1) #输出:[0 1 2 3 4 5 6 7 8 9]
t1 = np.arange(10)
print(t1) #输出:[0 1 2 3 4 5 6 7 8 9]
#输出0-10的数据,步长为2
t1 = np.arange(0,10,2)
print(t1) #输出:[0 2 4 6 8]
#调整数据类型
t2 = t1.astype("int8")
print(t2,t2.dtype) #输出:[0 2 4 6 8] int8
#numpy中的小数
#产生3个0-1随机数
t1 = np.array([random.random() for i in range(3)])
print(t1,t1.dtype) #输出:[0.08668437 0.33664667 0.43439296] float64
#将t1取小数点后两位
t1 = np.round(t1,2)
print(t1,t1.dtype) #输出:[0.35 0.02 0.6 ] float64
2.一二三维数组,更改数组形状,在不知道t5元素个数的情况下,将其变成1维数组,数组的计算函数
import numpy as np
#一维数组
t1 = np.arange(12)
print(t1) #输出:[ 0 1 2 3 4 5 6 7 8 9 10 11]
#1个数字表示是1维数组,12表示有12个数据
print(t1.shape) #输出:(12,)
#二维数组
t2 = np.array([[1,2,3],[4,5,6]])
print(t2)
"""
#输出:
[[1 2 3]
[4 5 6]]
"""
#2表示2行,3表示3列,2行3列二维
print(t2.shape) #输出:(2, 3)
#三维数组
t3 = np.array([[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]])
print(t3)
"""
#输出:
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]]
"""
#1表示1个块,4表示4行,3表示3列 1个块4行3列
print(t3.shape) #输出:(1, 4, 3)
#更改数组形状
#1维数组转换成2维数组
#因为t1有12个数据,变成二维的时候3*4=12刚好就可以变成3行4列的
t4 = t1.reshape((3,4))
print(t4)
print(t4.shape) #输出:(3, 4)
"""
#输出:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
#1维数组转换成3维数组,2块2行3列 2×2×3=12才可以
t5 = t1.reshape((2,2,3))
print(t5)
"""
#输出:
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
"""
#3维数组转换成2维数组, 6*2=12才可以
t6 = t5.reshape((6,2))
print(t6)
"""
#输出:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
"""
#3维数组转换成1维数组 2*2*3=12
t7 = t5.reshape(12)
print(t7) #输出:[ 0 1 2 3 4 5 6 7 8 9 10 11]
#在不知道t5元素个数的情况下,将其变成1维数组
t8 = t5.flatten()
print(t8) #输出:[ 0 1 2 3 4 5 6 7 8 9 10 11]
#将t5的所有元素加上2
print(t5+2)
"""
#输出:
[[[ 2 3 4]
[ 5 6 7]]
[[ 8 9 10]
[11 12 13]]]
"""
#两个数组相加是对应位置的元素相加
t6 = np.arange(0,3)
print(t5-t6)
"""
#输出:
[[[0 0 0]
[3 3 3]]
[[6 6 6]
[9 9 9]]]
"""
import numpy as np
#数组的计算函数
"""
常用的计算函数:
求和:t.sum(axis=None) axis参数可以是:0,1,2
均值:t.mean(a,axis=None) 受离群点的影响较大
中值:np.median(t,axis=None)
最大值:t.max(axis=None)
最小值:t.min(axis=None)
极值:np.ptp(t,axis=None) 最大值和最小值只差
标准差:t.std(axis=None)
"""
t1 = np.arange(0,12).reshape(3,4)
print(t1)
"""
#输出:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
#数组所有元素相加
t2 = np.sum(t1)
print(t2) #输出:66
#计算x行轴上的和,竖着相加0+4+8=12
print(np.sum(t1,axis=0)) #输出:[12 15 18 21]
#计算y行轴上的和,横着相加0+1+2+3=6
print(np.sum(t1,axis=1)) #输出:[ 6 22 38]
#求均值
#求所有的数据均值
print(np.mean(t1)) #输出:5.5
#求竖向相加的均值
print(np.mean(t1,axis=0)) #输出:[4. 5. 6. 7.]
#求横向相加的均值
print(np.mean(t1,axis=1)) #输出:[1.5 5.5 9.5]
#求中值
print(np.median(t1)) #输出:5.5
#求每一列中的中值
print(np.median(t1,axis=0)) #输出:[4. 5. 6. 7.]
#求每一行中的中值
print(np.median(t1,axis=1)) #输出:[1.5 5.5 9.5]
#求最大值
print(np.max(t1)) #输出:11
#求每一列中的最大值
print(np.max(t1,axis=0)) #输出:[ 8 9 10 11]
#求每一行中的最大值
print(np.max(t1,axis=1)) #输出:[ 3 7 11]
#求最小值
print(np.min(t1)) #输出:0
#求每一列中的最小值
print(np.min(t1,axis=0)) #输出:[0 1 2 3]
#求每一行中的最小值
print(np.min(t1,axis=1)) #输出:[0 4 8]
#求极值(最大值和最小值之差)
print(np.ptp(t1)) #输出:11
#求每一列中的极值(最大值和最小值之差)
print(np.ptp(t1,axis=0)) #输出:[8 8 8 8]
#求每一行中的极值(最大值和最小值之差)
print(np.ptp(t1,axis=1)) #输出:[3 3 3]
3.读取csv文件,进行转置方法
#coding = utf-8
import numpy as np
"""
sj.csv:CSV文件路劲
delimiter:CSV文件数据中间都是通过","逗号来分割的,所以就填写数据分割的符号
dtype:加载的数据以什么类型显示,正常情况不设置的话是float类型,数据以科学计数法显示,改成int可以正常显示
unpack:是否转置,True表示要转置,False表示不进行转置显示
还有几个没有展示的参数:
frame:可以是.gz或bz2压缩文件
skiprows:跳过前x行,一般跳过第一行表头
usecols: 读取指定的列,索引,元祖类型
"""
t1 = np.loadtxt("sj.csv",delimiter =",",dtype="int",unpack=False)
print(t1)
"""
#输出:
[[ 12 78 45]
[450 784 451]
[412 3 7]]
"""
#进行转置方法1:transpose()
print(t1.transpose())
"""
#输出:
[[ 12 450 412]
[ 78 784 3]
[ 45 451 7]]
"""
#进行转置方法2:T
print(t1.T)
"""
#输出:
[[ 12 450 412]
[ 78 784 3]
[ 45 451 7]]
"""
#进行转置方法3:交换轴,x轴和y轴进行交换本来是(0,1),交换后(1,0)
print(t1.swapaxes(1,0))
"""
#输出:
[[ 12 450 412]
[ 78 784 3]
[ 45 451 7]]
"""
4.读取csv文件取不连续的行,列
CSV内容如下:
[[ 12 78 45]
[450 784 451]
[412 3 7]]
"""
#取行
#取第3行
print(t1[2]) #输出:[412 3 7]
#连续取多行,从第2行开始往后的所有行数都取
print(t1[1:])
"""
输出:
[[450 784 451]
[412 3 7]]
"""
#取不连续的行,第1行和第3行,注意是:[[]]
print(t1[[0,2]])
"""
输出:
[[ 12 78 45]
[412 3 7]]
"""
#取列
#取第一列
print(t1[:,0]) #输出:[ 12 450 412]
#取连续的多列,取第2列往后的所有列
print(t1[:,1:])
"""
输出:
[[ 78 45]
[784 451]
[ 3 7]]
"""
#取不连续的多列,取第1列和第3列
print(t1[:,[0,2]])
"""
#输出:
[[ 12 45]
[450 451]
[412 7]]
"""
#取行和列交叉的值,取第2行和第3列交叉的值
print(t1[1,2]) #输出:451
#取多行和多列交叉的值,行值:0:2,列值:0:3
print(t1[0:2,0:3])
"""
#输出:
[[ 12 78 45]
[450 784 451]]
"""
#取多个不相邻的点,1行和1列的值,3行和2列的值
print(t1[[0,2],[0,1]]) #输出:[12 3]
#取多个不相邻的点,1行和1列的值,3行和2列的值,2行1列的值
print(t1[[0,2,1],[0,1,0]]) #输出:[ 12 3 450]
5.下面的方式对numpy设置值
import numpy as np
#通过条件设定值,可以根据前面的条件直接进行等号赋值,也可以通过下面的方式设置值
t1 = np.arange(0,24).reshape(4,6)
print(t1)
"""
#输出:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
"""
#将小于10的数据设置为0
t1[t1<10] = 0
print(t1)
"""
#输出:
[[ 0 0 0 0 0 0]
[ 0 0 0 0 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
"""
#把小于10的数字设置为1,把大于10的替换为10,三元算法
t2 = np.where(t1<10,2,10)
print(t2)
"""
#输出:
[[ 2 2 2 2 2 2]
[ 2 2 2 2 10 10]
[10 10 10 10 10 10]
[10 10 10 10 10 10]]
"""
#把小于10的数字设置成10,大于20的数字设置成20
t3 = t1.clip(10,20)
print(t3)
"""
#输出:
[[10 10 10 10 10 10]
[10 10 10 10 10 11]
[12 13 14 15 16 17]
[18 19 20 20 20 20]]
"""
6.数组的拼接
import numpy as np
#数组的拼接
t1 = np.arange(0,12).reshape(2,6)
print(t1)
"""
#输出:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
"""
t2 = np.arange(12,24).reshape(2,6)
print(t2)
"""
#输出:
[[12 13 14 15 16 17]
[18 19 20 21 22 23]]
"""
#竖向拼接vstack
t3 = np.vstack((t1,t2))
print(t3)
"""
#输出:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
"""
#横向拼接hstack
t4 = np.hstack((t1,t2))
print(t4)
"""
#输出:
[[ 0 1 2 3 4 5 12 13 14 15 16 17]
[ 6 7 8 9 10 11 18 19 20 21 22 23]]
"""
7.数组的行列交换
import numpy as np
#数组的行列交换
t1 = np.arange(0,12).reshape(2,6)
print(t1)
"""
#输出:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
"""
#行交换,第1行和第2行进行交换
t1[[0,1],:]= t1[[1,0],:]
print(t1)
"""
#输出:
[[ 6 7 8 9 10 11]
[ 0 1 2 3 4 5]]
"""
#列交换,第4列和第6列进行交换
t1[:,[3,5]] = t1[:,[5,3]]
print(t1)
"""
#输出结果:
[[ 0 1 2 5 4 3]
[ 6 7 8 11 10 9]]
"""
8.两个表格合并拼接案例
import numpy as np
#两个表格各自增加一列内容水平合并,调整列顺序后,垂直合并成一个表格
path1 = "数据1.csv"
path2 = "数据2.csv"
#加载数据1
t1 = np.loadtxt(path1,delimiter =",",dtype="str",unpack=False)
#加载数据2,跳过第一行不显示表头
t2 = np.loadtxt(path2,delimiter =",",dtype="str",unpack=False,skiprows=1)
#将数据2的数据进行交换列,使其和数据1的列表头一直
#交换第1和第4列
t2[:,[0,3]] = t2[:,[3,0]]
#交换第1和第3列
t2[:,[1,2]] = t2[:,[2,1]]
#在数据1表格增加一列全部数据为0的数据,行数和数据1相同作为列标识
zero_datas = np.zeros((t1.shape[0],1))
#横向拼接数据1表格和全部是数据0的表格
t1 = np.hstack((t1,zero_datas))
#在数据2表格增加一列全部数据为1的数据,行数和数据1相同作为列标识
one_datas = np.ones((t2.shape[0],1))
#横向拼接数据2表格和全部是数据1的表格
t2 = np.hstack((t2,one_datas))
#垂直拼接数据1表格和数据2表格
t3 = np.vstack((t1,t2))
print(t3)
"""
#输出:
[['序号' '姓名' '年龄' '性别' '0.0']
['1' '王一' '11' '男' '0.0']
['2' '李二' '13' '女' '0.0']
['3' '胡三' '14' '女' '0.0']
['4' '牛四' '43' '男' '0.0']
['1' '牛牛' '69' '女' '1.0']
['2' '妞妞' '78' '男' '1.0']
['3' '哈哈' '88' '女' '1.0']
['4' '龟龟' '96' '男' '1.0']]
"""
9.输出特殊数组
import numpy as np
#输出特殊数组
#输出2行3列全是0的数组
t1 = np.zeros((2,3))
print(t1)
"""
#输出:
[[0. 0. 0.]
[0. 0. 0.]]
"""
#输出2行3列全是1的数组
t2 = np.ones((2,3))
print(t2)
"""
#输出:
[[1. 1. 1.]
[1. 1. 1.]]
"""
#输出5行5列斜对角线都是1的数组,正方形数组
t3 = np.eye(5)
print(t3)
"""
#输出:
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
"""
#将等于1的数值更改为等于-1
t3[t3==1] = -1
print(t3)
"""
#输出:
[[-1. 0. 0. 0. 0.]
[ 0. -1. 0. 0. 0.]
[ 0. 0. -1. 0. 0.]
[ 0. 0. 0. -1. 0.]
[ 0. 0. 0. 0. -1.]]
"""
t1 = np.arange(0,24).reshape(4,6)
print(t1)
"""
#输出:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
"""
#获取X轴最大值的索引位置,竖着看0,6,12,18最大值是18,索引是3
t2 = np.argmax(t1,axis=0)
print(t2) #输出:[3 3 3 3 3 3]
#获取y轴最小值,横着看0,1,2,3,4,5最小的值是0,索引位置是0
t3 = np.argmin(t1,axis=1)
print(t3) #输出:[0 0 0 0]
10.numpy生成随机数
import numpy as np
#numpy生成随机数
#在10-20范围内随机生成一个4行5列的数组
t1 = np.random.randint(10,20,(4,5))
print(t1)
"""
#输出:
[[19 19 18 18 11]
[12 10 12 13 14]
[18 14 12 17 19]
[16 16 18 16 13]]
"""
#这里增加了相同的种子,每次随机生成的数据相同
np.random.seed(10)
t1 = np.random.randint(10,20,(4,5))
print(t1)
11.生成均匀分布,生成正太分布
import numpy as np
#生成均匀分布
#生成2维度均匀分布的随机数数组
t1 = np.random.rand(2,3)
print(t1)
"""
#输出:
[[0.04274737 0.1361201 0.84016315]
[0.44552229 0.7172352 0.27860468]]
"""
#生成3维度均匀分布的随机数数组(值在0-1之间),2块,3行4列的三维数组
t1 = np.random.rand(2,3,4)
print(t1)
"""
#输出:
[[[0.24767532 0.16923183 0.62929336 0.33167291]
[0.2348981 0.01604486 0.80277711 0.28230471]
[0.23967977 0.08896188 0.56858435 0.76727779]]
[[0.47388122 0.12789331 0.39452345 0.70882385]
[0.03865579 0.22865491 0.61875551 0.54528252]
[0.62982165 0.8362343 0.55457358 0.09833485]]]
"""
#生成0-10之间,3行4列的均匀分布的数组
t1 = np.random.uniform(0,10,(3,4))
print(t1)
"""
#输出:
[[3.99960109 0.56396094 4.1519833 4.36621776]
[0.34286939 6.2153802 4.62656694 8.63443251]
[9.86762737 5.19151595 6.27414267 7.93814561]]
"""
#生成正太分布
#生成2维度标准正太分布的随机数数组,平均数0,标准差1
t1 = np.random.randn(2,3)
print(t1)
"""
#输出:
[[ 0.6605607 0.30783449 -1.46573396]
[-0.98326193 1.52080767 0.10181919]]
"""
#生成3维度标准正太分布的随机数数组,平均数0,标准差1
t1 = np.random.randn(2,2,3)
print(t1)
"""
#输出:
[[[ 2.37741191 1.87040913 0.45063207]
[ 0.56533405 0.00433109 -1.08064214]]
[[ 1.33627413 -0.22782971 -1.36614693]
[ 0.9860127 0.60480094 -2.43832716]]]
"""
"""
normal(loc,scale,(size))
loc:分布中心是loc,概率分布的均值 这里给的是:1
scale:标准差 这里给的是:2
size:形状 这里给的是(3,4)
"""
#指定正太分布中随机抽取样本
t1 = np.random.normal(1,2,(3,4))
print(t1)
"""
#输出:
[[ 1.55218173 5.54394444 1.66259268 2.05608633]
[ 0.50338512 3.74396925 -1.19796599 -3.01734329]
[-0.70629025 2.79923655 4.09952597 1.39394705]]
"""
12.统计数据是nan的数据个数,统计数据非0的数据个数,将数据是nan的替换为0
import numpy as np
"""
nan(不是一个数)和inf(无穷大),数据类型都是浮点数类型float
"""
t1 = np.arange(0,12).astype(float).reshape(3,4)
t1[[0,2]] = np.nan
print(t1)
"""
#输出:
[[nan nan nan nan]
[ 4. 5. 6. 7.]
[nan nan nan nan]]
"""
print(t1!=t1)
"""
#输出:
[[ True True True True]
[False False False False]
[ True True True True]]
"""
#统计数据是nan的数据个数
print(np.count_nonzero(np.isnan(t1))) #输出:8
#判断数组中nan的数据个数
t2 = np.count_nonzero(t1!=t1)
print(t2) #输出:8
#统计数据非0的数据个数
print(np.count_nonzero(t1)) #输出:12
#将数据是nan的替换为0
#np.isnan(t1)判断t1数组数据是否为nan
t1[np.isnan(t1)] = 0
print(t1)
"""
#输出:
[[0. 0. 0. 0.]
[4. 5. 6. 7.]
[0. 0. 0. 0.]]
"""
13.将有nan的数据通过均值进行填充
import numpy as np
#将有nan的数据通过均值进行填充
t1 = np.arange(0,12).reshape(3,4).astype("float")
print(t1)
"""
#输出:
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
"""
t1[[1,1],[2,3]] = np.nan
print(t1)
"""
#输出:
[[ 0. 1. 2. 3.]
[ 4. 5. nan nan]
[ 8. 9. 10. 11.]]
"""
#遍历数组,t1.shape[0]有多少行,t1.shape[1]有多少列
for i in range(t1.shape[1]): #遍历每一列
temp_col = t1[:,i] #当前列
#统计当前列不是数字的个数
nan_num = np.count_nonzero(temp_col!=temp_col)
#当前列统计的不是数字的个数如果不为0,表示是nan类型
if nan_num!=0:
#当前不为nan的列
temp_not_nan_col = temp_col[temp_col==temp_col]
#选中当前不为nan的数值,将其赋值为这一列的均值
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
print(t1)
"""
#输出:
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
"""