python数据分析(Numpy索引及切片)
索引和切片在基础语法那篇文章中介绍过,python内置的数据类型基本都可以使用索引和切片,numpy是一个数组对象,我们来看看它的索引和切片有什么不同的地方。
普通索引及切片
# 一维数组:和python中的列表一样
ar = np.arange(20)
print(ar)
print(ar[4])
print(ar[3:6])
# 二维数组
ar = np.arange(16).reshape(4,4)
print(ar, '数组轴数为%i' %ar.ndim) # 4*4的数组
print(ar[2], '数组轴数为%i' %ar[2].ndim) # 切片为下一维度的一个元素,所以是一维数组
print(ar[2][1]) # 二次索引,得到一维数组中的一个值
print(ar[1:3], '数组轴数为%i' %ar[1:3].ndim) # 切片为两个一维数组组成的二维数组
print(ar[2,2]) # 切片数组中的第三行第三列 → 10
print(ar[:2,1:]) # 切片数组中的1,2行、2,3,4列 → 二维数组
结果如下:
布尔索引及切片
- 以布尔型的矩阵去做筛选
ar = np.arange(12).reshape(3,4)
i = np.array([True,False,True])
j = np.array([True,True,False,False])
print(ar)
print(i)
print(j)
print(ar[i,:]) # 在第一维度做判断,只保留True,这里第一维度就是行,ar[i,:] = ar[i](简单书写格式)
print(ar[:,j]) # 在第二维度做判断,这里如果ar[:,i]会有警告,因为i是3个元素,而ar在列上有4个
结果如下:
- 构造判断矩阵
m = ar > 5
print(m) # 这里m是一个判断矩阵
print(ar[m])
结果如下:
用m判断矩阵去筛选ar数组中>5的元素 ,这个是重点!pandas判断方式原理就来自此处。
数组索引及切片的值更改、复制
ar = np.arange(10)
print(ar)
ar[5] = 100
ar[7:9] = 200
print(ar)
# 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组
ar = np.arange(10)
b = ar.copy()
b[7:9] = 200
print(ar)
print(b)
# 复制
结果如下: