大数据清洗2(元素操作)
Posted 晨沉宸辰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据清洗2(元素操作)相关的知识,希望对你有一定的参考价值。
元素操作
一、访问ndarray中的元素–索引和切片
import numpy as np #全部行都能输出 from IPython.core.interactiveshell
import InteractiveShell InteractiveShell.ast_node_interactivity = "all"
1、基本索引和切片
1.1 一维数组的索引和切片
arr1 = np.random.randint(0,20,10)
arr1
arr1[3]
#切片语法:ndarray[start:stop:step]
#如果start被省略,默认从第0个位置开始切片
#如果stop被省略,默认切片到最后,包含最后位置的元素
#如果step被省略,默认步长为1
arr1[:]
arr1[2:5]
#终止值位置如果被指定,这个位置是不会被切到的
arr1[1:7:2]
arr1
反向切片的时候一定要注意,切片的方向要和步长方向一致,否则不能切到任何元素
arr1[-2:-5:-1]
arr1
arr1[::-1]
arr1[-1:0:-1]
arr1[-1:-10:-1]
arr1[-1:-11:-1]
1.2 高维数组的基本索引和切片
arr2 = np.random.randint(0,20,(3,3))
arr2
arr2[1]
arr2[2][1]
arr1
arr1[1]
arr3 = np.random.randint(0,20,(2,3,3))
arr3
arr3[0][0][1:]
通过基本索引和切片切出来的新数组,和原数组之间相互不独立,对其中一个数组内元素进行更改的时候,
另一个数组内对应的元素也会发生相应的改变
arr1
arr1_1=arr1[3:6] #浅拷贝
arr1_1
arr1_1[1] = 99
arr1_1
arr1
arr1_2 = arr1[6:8].copy() #深拷贝,切片出来的数组和原数组之间相互独立,互不影响
arr1_2
arr1_2[1] = 88
array([15, 88])
arr1
2、高级索引
2.1 整数数组索引和切片
arr1
arr1[[1,2,4,5]]
arr1_3 = arr1[[1,2,4,5]]
arr1_3
arr1_3[2] = 66
arr1_3
arr1
arr2
arr2[[0,1,2],[0,1,2]] #切片语法中arr[[元素所在的数组中第0个轴上的位置信息],[元素所在的数组 中第1个轴上的位置信息].......]
arr3
#切取18,4,14
arr3[[0,0,1],[0,0,2],[0,2,0]]
2.2 布尔索引
arr1
arr1>10
arr1[arr1>10]
二、NumPy运算
1、算术运算相关函数
arr6 = np.array([2,2,2])
arr6
np.exp(2) #自然数e的平方
np.exp(arr6)
np.e
np.e**2
np.exp2(arr6)
pow(3,2)
np.power(arr6,3)
np.power(3,arr6)
np.square(arr6)
np.sqrt(arr6)
np.log(arr6) #求自然对数
np.log2(arr6)
np.log10(arr6)
np.log(4)/np.log(2) #求的是以2为底4的对数
10//3
10%3 #余数
arr6
np.mod(arr6,2)
arr7 = np.array([3,3,3])
np.mod(arr6,arr7)
2、取整函数
- numpy.around() 这个函数返回四舍五入到所需精度的值。
- numpy.floor() 向下取整 此函数返回不大于输入参数的最大整数。
- numpy.ceil()向上取整 本函数返回输入值的上限
arr8 = np.random.randn(8)
arr8
np.around(arr8) #四舍五入,遇0.5取偶
np.around(arr8,3)
arr9 = np.array([1.5,2.5,3.5,4.5])
arr9
np.around(arr9)
np.floor(arr9) #向下取整,找到距离浮点数最近的下限整数
arr10 = np.array([1.99999999,1.0000001])
arr10
np.floor(arr10)
np.ceil(arr10) #向上取整
3、统计函数
最大值 最小值 均值 中位数 标准差 方差
arr11 = np.random.randint(0,21,(3,3))
arr11
np.amax(arr11)
np.amax(arr11,axis=0)
np.amax(arr11,axis=1)
np.amin(arr11)
np.amin(arr11,axis=0)
np.amin(arr11,axis=1)
np.sum(arr11)
np.sum(arr11,axis=0)
np.mean(arr11)
np.mean(arr11,axis=0)
np.mean(arr11,axis=1)
array([2., 7., 6.])
array([1.66666667, 5.33333333, 8. ])
np.var(arr11)
np.var(arr11,axis=0)
np.var(arr11,axis=1)
26.666666666666668
array([ 2.66666667, 34.66666667, 28.66666667])
array([ 5.55555556, 29.55555556, 24.66666667])
np.std(arr11)
np.std(arr11,axis=0)
np.std(arr11,axis=1)
5.163977794943222
4、排序和索引函数
arr13 = np.random.randint(1,30,9)
arr13
np.sort(arr13) #升序排序
np.sort(arr13)[::-1] #降序排序
arr14 = np.random.randint(1,30,(4,3))
arr14
np.sort(arr14) #默认按最内侧轴进行排序
np.nonzero(arr15) #返回的是非零元素在原数组中的位置
np.where(arr13>10) #这里返回的是位置信息
arr13[np.where(arr13>10)]
arr16 = np.random.randint(1,30,9)
arr16
5、唯一化
- np.unique() 去重函数
arr13
array([23, 18, 26, 29, 7, 18, 17, 8, 2])
np.unique(arr13)
array([ 2, 7, 8, 17, 18, 23, 26, 29])
`np.unique(arr13,return_index=True,return_counts=True)`
(array([ 2, 7, 8, 17, 18, 23, 26, 29]), array([8, 4, 7, 6, 1, 0, 2, 3], dtype=int64), array([1, 1, 1, 1, 2, 1, 1, 1], dtype=int64))
6、集合逻辑
- np.in1d() 验证元素是否在给定序列中
- np.intersect1d() 求交集
- np.union1d() 求并集
- np.setdiff1d() 求差集
#求交集 并集 差集 判断元素是否在数组当中
arr13
arr16
array([23, 18, 26, 29, 7, 18, 17, 8, 2]) array([ 1, 4, 1, 18, 11, 17,
15, 3, 28])
#判断元素是否在数组中
np.in1d(arr13,arr16)
array([False, True, False, False, False, True, True, False, False])
np.in1d(arr16,arr13)
array([False, False, False, True, False, True, False, False, False]) np.in1d(arr16,arr13,invert=True)
array([ True, True, True, False, True, False, True, True, True]) arr16[
np.in1d(arr16,arr13,invert=True)]
array([ 1, 4, 1, 11, 15, 3, 28])
np.intersect1d(arr13,arr16) #求交集
np.union1d(arr13,arr16)
#求并集
array([ 1, 2, 3, 4, 7, 8, 11, 15, 17, 18, 23, 26, 28, 29])
以上是关于大数据清洗2(元素操作)的主要内容,如果未能解决你的问题,请参考以下文章