前言
索引和切片是数据分析的基础,今天先学习一下numpy中的索引和切片用法。
一、索引
1. 整数索引
(1)一维数组
假设有一个一维数组array_1d
下标 | [0] | [1] | [2] | [3] | [4] | [5] |
---|---|---|---|---|---|---|
数值 | 10 | 20 | 30 | 40 | 50 | 60 |
那么,array_1d[3]取的就是下标为3的数字40,即数组中的第四个数。
这里要注意,数组的下标都是从0开始的
(2)二维数组
假设有一个二维数组array_2d
行/列号 | [0]列 | [1]列 | [2]列 |
---|---|---|---|
[0]行 | 1 | 2 | 3 |
[1]行 | 4 | 5 | 6 |
[2]行 | 7 | 8 | 9 |
如果索引中只有一个数[a],代表的是取行号为a的一整行
如果索引中有两个数[a,b],代表的是取行号为a、列号为b的这个元素
2. 花式索引
(1)对一维数组来说,使用花式索引可以获取该数组的多个元素。
(2)对二维数组来说,可以使用花式索引获取该数组的多行元素。
这里,二维数组应用花式索引要特别注意以下两种表述方式:
3. 布尔索引
打个比方,有一组成绩数据,要从中筛选出60分以下的数据,就需要用到布尔索引。
布尔可以简单理解为真和假,符合条件为真,即True,不符合条件为假,即False。
使用布尔索引访问时,会先生成一个外观长得几乎一模一样的数组,区别就是数组中存放的是原来那个数字的判断结果,再按布尔值取到判断结果为True的数值,如下图所示:
array_2d=np.arrange(1,10).reshape((3,3))
print(array_2d)
print("-----------")
# 使用布尔索引访问元素
print(array_2d>5)
print("--------------")
print(array_2d[array_2d>5])
在jupyter notebook中的运行结果如下:
二、数组切片
1. 一维数组的切片
Numpy中支持使用切片访问数组的元素。
假设有一个一维数组array_1d
千万注意数组的下标都是从0开始,那么这6个数值对应的就是下标0到5。
下标 | [0] | [1] | [2] | [3] | [4] | [5] |
---|---|---|---|---|---|---|
数值 | 10 | 20 | 30 | 40 | 50 | 60 |
下面演示不同切片方式及结果:
用法 | 范围 | 示例 | 结果 | 图示 |
---|---|---|---|---|
[a:b] | 下标[a,b)左闭右开 | array_1d[1:3] | [20 30] | ![]() |
[:b] | 若b>0,取前b个元素 | array_1d[:3] | [10 20 30] | ![]() |
[:-b] | 若冒号后是个负数,则代表去掉最后b个元素 | array_1d[:-2] | [10 20 30 40] | ![]() |
[:] | 所有元素 | array_1d[:] | [10 20 30 40 50 60] | ![]() |
[::c] | 从开头到结尾,步长为2 | array_1d[::2] | [10 30 50] | ![]() |
验证代码:
import numpy as np
array_1d=np.array([10,20,30,40,50,60])
print(array_1d[1:3]) #访问索引为1、2的元素
print(array_1d[:3]) #访问前3个元素
print(array_1d[:-1]) #访问除末尾元素之外的元素
print(array_1d[:]) #访问全部元素
print(array_1d[::2]) #访问从刚开头到末尾、步长为2的元素
2. 二维数组的切片
与一维数组相比,二维数组支持更多的切片操作。
假设有一个二维数组array_2d
行/列号 | [0]列 | [1]列 | [2]列 |
---|---|---|---|
[0]行 | 1 | 2 | 3 |
[1]行 | 4 | 5 | 6 |
[2]行 | 7 | 8 | 9 |
下面演示不同切片方式及结果:
示例 | 范围 | 结果 | 图示 |
---|---|---|---|
array_2d[:2] | 访问前2行 | [[1 2 3] [4 5 6]] | ![]() |
array_2d[:2, 0:2] | 前两行,[0]列和[1]列 | [[1 2] [4 5]] | ![]() |
array_2d[:2,1] | 前两行、第二列 | [2 5] | ![]() |
验证代码:
import numpy as np
array_2d=np.array([[1,2,3],[4,5,6],[7,8,9]]) #创建二维数组
print(array_2d)
print('-------')
print(array_2d[:2]) #使用切片访问前两行的元素
print(array_2d[:2,0:2]) #使用切片访问前两行、第一列和第二列的元素
print(array_2d[:2,1]) #使用切片访问前两行、第二列的元素
总结
Series和DateFrame中的索引和切片用法与本文类似,还在探索中。。。
参考资料:人民邮电出版社,黑马程序员主编的《Python数据预处理》