第六章 数据选择(六)
- 常规的数据选择主要有列选择、行选择、行列同时选择三种方式。
6.1 列选择
6.1.1 选择某一列/某几列
- 在Python中我们要想获取某列只需要在表df后面的方括号中指明要选择的列名即可。如果是一列,则只需要传入一个列名;如果是同时选择多列,则传入多个列名即可,多个列名用一个list存起来。
df[["客户姓名","交易日期"]]
客户姓名 交易日期
0 张旭 2018-10-01
1 李刚 2018-10-02
2 孙峰 2018-10-03
3 赵恒 2018-10-04
4 赵恒 2018-08-12
- 除了传入具体的列名,我们还可以传入具体列的位置,即第几列,对数据进行选取,通过传入位置来获取数据时需要用到iloc方法
df.iloc[:,1:2]
客户姓名
0 张旭
1 李刚
2 孙峰
3 赵恒
4 赵恒
- 在上面的代码中,iloc 后的方括号中逗号之前的部分表示要获取的行的位置,只输入一个冒号,不输入任何数值表示获取所有的行;
- 逗号之后的方括号表示要获取的列的位置,列的位置同样是也是从0开始计数。
6.1.2 选择连续的某几列
- 在Python中可以通过前面介绍的普通索引和位置索引获取某一列或多列的数据。当你要获取的是连续的某几列,用普通索引和位置索引也是可以做到的,但是因为你要获取的列是连续的,所以只要传入这些连续列的位置区间即可,同样需要用到iloc方法。
- 通过传入一个位置区间来获取数据的方式称为切片索引。
6.2 行选择
6.2.1 选择某一行/某几行
- 在Python中,获取行的方式主要有两种,一种是普通索引,即传入具体行索引的名称,需要用到loc方法;另一种是位置索引,即传入具体的行数,需要用到iloc方法。
df.loc[2:]
订单编号 客户姓名 唯一识别码 交易日期
2 A3 孙峰 103 2018-10-03
3 A4 赵恒 104 2018-10-04
4 A5 赵恒 104 2018-08-12
6.2.2 选择连续的某几行
- 在Python中,选择连续的某几行时,你同样可以把要选择的每一个行索引名字或者行索引的位置输进去。很显然这是没有必要的,只要把连续行的位置用一个区间表示,然后传给iloc即可。
df.loc[1:]
订单编号 客户姓名 唯一识别码 交易日期
1 A2 李刚 102 2018-10-02
2 A3 孙峰 103 2018-10-03
3 A4 赵恒 104 2018-10-04
4 A5 赵恒 104 2018-08-12
df.iloc[1:]
订单编号 客户姓名 唯一识别码 交易日期
1 A2 李刚 102 2018-10-02
2 A3 孙峰 103 2018-10-03
3 A4 赵恒 104 2018-10-04
4 A5 赵恒 104 2018-08-12
6.2.3 选择满足条件的行
- 在Python中,我们直接在表名后面指明哪列要满足什么条件,就可以把满足条件的数据筛选出来
df[df["年龄"]<55]
订单编号 客户姓名 唯一识别码 年龄 交易日期
0 A1 张旭 101 24 2018-10-01
1 A2 李刚 102 34 2018-10-02
2 A3 孙峰 103 23 2018-10-03
4 A5 赵恒 104 43 2018-08-12
- 我们把上面这种通过传入一个判断条件来选择数据的方式称为布尔索引。
6.3 行列同时选择
- 上面的数据选择都是针对单一的行或列进行选择,实际业务中我们也会用到行、列同时选择,所谓的行、列同时选择就是选择出行和列的相交部分。
6.3.1 普通索引+普通索引选择指定的行和列
df.loc[["一","三"],["客户姓名","年龄"]]
客户姓名 年龄
一 张旭 24
三 孙峰 23
6.3.2 位置索引+位置索引选择指定的行和列
df.iloc[[1,3],[2,4]]
唯一识别码 交易日期
二 102 2018-10-02
四 104 2018-10-04
6.3.3 布尔索引+普通索引选择指定的行和
df[df["年龄"]<55][["客户姓名","年龄"]]
客户姓名 年龄
一 张旭 24
二 李刚 34
三 孙峰 23
五 赵恒 43
6.3.4 切片索引+切片索引选择指定的行和列
df.iloc[1:,2:]
唯一识别码 年龄 交易日期
二 102 34 2018-10-02
三 103 23 2018-10-03
四 104 66 2018-10-04
五 104 43 2018-08-12
6.3.5 切片索引+普通索引选择指定的行和列
- 前面我们说过,如果是普通索引,就直接传入行或列名,用loc方法即可;如果是切片索引,也就是传入行或列的位置区间,要用 iloc 方法。如果是切片索引+普通索引,也就是行(列)用切片索引,列(行)用普通索引,这种交叉索引要用ix方法。
- 尝试了一下报错了,后续在了解一下这个方法