数据分析(二):numpy

a=np.array([…],[…])
a.shape #可以输出a的(行,列) 所谓块:[ […]
[…]
[…]
]

a.reshape ( , ) #修改a的行,列
t=np.arange(24).reshape((2,3,4))
#arange会产生0到24的一个数组,排成2个块,每个块3行4列
t.reshape((4,6)) #变成二维,只要数据个数相同,这种类似return的语句,t还是原来那个三维数组

当不知道t的形状时,又想把它变成一维数组
t1=t.reshape((t.shape[0] * t.shape[1] , )) 的效果和下面这个语句是一样的
t.flatten() #直接展开
shape[0]是t的行数
shape[1]是t的列数

numpy帮助处理数值型数据
在np.array([…])与np.arange(… , …)是一样的,都是创立一个数组,前者中括号内还可以用range()

type(a), 或者a.dtype都可以看a的数据类型
t1=np.array([random.random() for i in range(10)]) #取10个随机数
t2=np.round(t,2) #对t取2位小数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们得到数据后:1.想要反应什么样的结果,解决什么问题!
2.选择什么方式呈现?(画什么图)
3.数据还需要什么样的处理
4.写代码实现

print(t[2]) == print(t[2, : ]) #t是一个二维数组,输出第3行
t[[2,8,10]] #取不连续的几行 t[2:3] 或者 t[2:3, : ] #取连续几行

print(t[:,0]) #去第一列

t[[0,2],[0,1]] #取两个不相邻的点
t[2:5,1:4] #取连续几行相交的点

t[t<3]=3 #令数组t内小于3的数字赋值=3,即按条件修改数组内的值 注意:t[t==1]=2 才是把t内为1的值赋值为2
t[t<3] #仅仅会输出符合条件的几个值

在numpy中的三元运算符:np.where(t<10,0,10) #当t<10时,赋值为0,t>=10的时候赋值为10
t.clip(10,18) #t中小于10的换成10,大于18的换成18
可以用t[3,3]=np.nan把t中第4行,第4列的那个数赋值成nan,但是注意nan是浮点型,所以令t=t.astype(float) 把int变成浮点,才能转化nan

在这里插入图片描述

在这里插入图片描述

np.vstack((t1,t2)) #t1和t2竖直拼接,t1在上面
np.hstack((t1,t2)) #t1和t2水平拼接,t1在左面
t[[1,2],:]=t[[2,1],:] #行交换
t[:,[0,2]]=t[:,[2,0]] #列交换

np.zeros(( ,)) #构造一个全0的数组 ,ones,eyes同理

np.argmax(t,axis=0) #获取最值的位置,axis=0即让每一列的同一行比较,输出位置,min同理

a=b.copy() #b的值赋给a,但是a,b互不影响

np.count_nozero(t) #t中不为0的个数
np.isnan(t) #t中是nan的地方输出为True
np.sum() #把t中所有数值都加到一起 np.sum( , axis=0) 每列和

碰到有缺失值的不能简单把nan替换成0,而应该替换成平均值或者中值,或者直接删除那一行

一个案例:
import numpy as np
t1=np.arrange(12).reshape((3,4)).astype(“float”)
t1[1,2:]=np.nan
for i in range(t1.shape(1)): #遍历所有列
temp_col=t1[:,i]
nan_num=np.count_nonzero(temp_col !=temp_col)
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() #选中当前为nan的位置,把值改为均值

猜你喜欢

转载自blog.csdn.net/weixin_43414976/article/details/88320893
今日推荐