文章目录

  • 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]]
"""

python 检验数据均匀分布 python生成均匀分布_数据


python 检验数据均匀分布 python生成均匀分布_python 检验数据均匀分布_02

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.]]
"""