数据分析04 numpy 常用函数
基本数学函数

sqrt 计算平方根
import numpy as np
# 根号9 就为3
print(np.sqrt(9))
print(np.sqrt([1,4,9]))
# 输出为,返回的是一个浮点数
3.0
[1. 2. 3.]
计算指数 exp
print(np.exp(1))
print(np.exp(0))
2.718281828459045
1.0
计算自然对数 log
print(np.log(2.71))
正弦值,余弦值
print(np.sin(-1))
print(np.cos(0))
绝对值
arr = np.array([-1,-2,1,2,3])
print(np.abs(arr))
[1 2 1 2 3]
a的b次幂
print(np.power(arr,3))
四舍五入
5是进一位
print(np.around([1.2,1.5,1.6]))
[1. 2. 2.]
向上取整,向下取整
arr = np.array([1.5,25.1,81])
# 向上取整
print(np.ceil(arr))
# 向下取整
print(np.floor(arr))
[ 2. 26. 81.]
[ 1. 25. 81.]
检测缺失值
np.isnan([1,2,np.nan,3])
# 输出为 np.nan 就是一个空的值,就是一个缺失值
array([False, False, True, False])
统计函数
求和,计算平均值,计算中位数,标准差,方差
最大值,最小值
分位数,累积和,累积差
求和/平均值
arr = np.random.randint(1,20,8)
print(arr)
[10 3 10 12 18 10 15 15]
# 求和
print(np.sum(arr))
93
# 平均值
print(np.mean(arr))
11.625
# 中位数,中间位置的数
# 奇数个,中间的数
print(np.median([1,2,4]))
2.0
# 偶数的话,就是中间2个数的平均值
print(np.median([1,2,4,5]))
3.0
# 计算标准差和方差
# 1,2,3 平均值为2
# x1-平均值这个差,每一个数都需要,然后差的平方
# 所有的平方都需要加起来,然后除以3
# 1-2的平方 + 2-2的平方 + 3-2的平方 算出来后/3
print(np.var([1,2,3]))
0.66666
计算最大值和最小值
print(np.max(arr))
print(np.min(arr))
# 输出最大值和最大值对应的索引
print(np.max(arr),np.argmax(arr))
print(np.min(arr),np.argmin(arr))
分位数
就是有一个数轴,中间的间隔都是一样的
# 44 47 64 67
# 47+64/2 就是中位数
# 1 2 3
# 2就是中位数
# 计算就是前20%的分位数
print(np.percentile(arr,20))
# 50% 就是中位数
print(np.percentile(arr,50))
# 0%就是第一个数字,100%就是最后一个数字
比较函数
判断,大于,小于,等于
逻辑与,或,非
检查数组中是否有一个true,是否所有的都为一个true
自定义检查
大于,小于,等于
print(arr)
# 判断里面的数据是否大于2,大于的话,就返回true
print(np.greater([1,2,3,4,5],2))
print(np.greater(arr,2))
# 判断小于
print(np.less([1,2,3,4,5],2))
# 判断等于
print(np.equal([1,2,3,4,5],2))
# 判断2个数组是否相等,形状需要一致,否则报错
print(np.equal([1,2,3,4,5],[1,2,3,4,5]))
[ True True True True True]
逻辑关系
print(np.logical_and([1,0,1,0],[1,0,1,0]))
print(np.logical_or([1,0,1,0],[1,0,1,0]))
print(np.logical_not([1,0,1,0]))
[ True False True False]
[ True False True False]
[False True False True]
检查
# 检查元素是否至少有一个元素为true
print(np.any([1,0,1,0]))
# 检查是否全部元素为true,就是说全部为真,返回true
print(np.all([1,0,1,0]))
True
False
自定义条件
np.where(条件,符合条件的。不符合条件的)
arr = np.array([1,2,3,4,5])
# 小于3的输出,大于3的就设置为0
print(np.where(arr<3,arr,0))
[1 2 0 0 0]
嵌套的方式,上面就2个条件,符合和不符合,如果有多种情况的呢?
score = np.random.randint(50,100,10)
print(score)
# 小于60输出不及格
# 小于80输出及格
# 小于90输出良好
# 90以上优秀
print(np.where(score<60,"不及格",np.where(score<80,"及格",np.where(score<90,"良好","优秀"))))
[91 98 95 73 76 79 66 75 92 85]
['优秀' '优秀' '优秀' '及格' '及格' '及格' '及格' '及格' '优秀' '良好']
# select也可以实现
select(条件,返回的结果)
# & 2边必须带上() 优先级
# default 都不符合的条件,必须要加上
print(np.select([score>80,(score>=60) & (score<=80),score<60],['优秀','良好','不及格'],default="未知"))
排序函数
# 设置一个种子
np.random.seed(10)
# 每次生成的数都是一样的
arr = np.random.randint(1,100,20)
print(arr)
# 改了原数组
arr.sort()
print(arr)
# np.sort(arr) 不会改变原数组
print(np.sort(arr))
print(arr)
# 原数组
[10 16 65 29 90 94 30 9 74 1 41 37 17 12 55 89 63 34 73 79]
# 没有改变原数组
[ 1 9 10 12 16 17 29 30 34 37 41 55 63 65 73 74 79 89 90 94]
# 原数组
[10 16 65 29 90 94 30 9 74 1 41 37 17 12 55 89 63 34 73 79]
print(np.sort(arr))
# 获取排序后的索引
print(np.argsort(arr))
[ 1 9 10 12 16 17 29 30 34 37 41 55 63 65 73 74 79 89 90 94]
[ 9 7 0 13 1 12 3 6 17 11 10 14 16 2 18 8 19 15 4 5]
# 1的索引为9(在原来的数组)
# 去重,还带有排序
print(np.unique(arr))
# 数组拼接
arr1 = np.array([1,2,3,4,5])
arr2 = np.array([4,5,6,7,8])
print(np.concatenate((arr1,arr2)))
# 上面生成的数为20个,分割成4个,可以整除
print(np.split(arr,4))
[array([10, 16, 65, 29, 90], dtype=int32), array([94, 30, 9, 74, 1], dtype=int32), array([41, 37, 17, 12, 55], dtype=int32), array([89, 63, 34, 73, 79], dtype=int32)]
# 在下标6,12,18三处分割
print(np.split(arr,[6,12,18]))
[array([10, 16, 65, 29, 90, 94], dtype=int32), array([30, 9, 74, 1, 41, 37], dtype=int32), array([17, 12, 55, 89, 63, 34], dtype=int32), array([73, 79], dtype=int32)]
# 调整数组的形状
print(np.reshape(arr,[5,4]))
# 变成了5行4列的二维数组,必须正好等于20,否则报错
print(np.reshape(arr,[2,10]))
# 5行4列
[[10 16 65 29]
[90 94 30 9]
[74 1 41 37]
[17 12 55 89]
[63 34 73 79]]
2行10列
[[10 16 65 29 90 94 30 9 74 1]
[41 37 17 12 55 89 63 34 73 79]]

浙公网安备 33010602011771号