Excel & Python | 菜品挑选——数据选择 | 04


之前是把所有的菜品都洗好并放在不同的容器里。现在要进行切配了,需要把这些菜品挑选出来,比如做一盘凉拌黄瓜,需要先把黄瓜找出来;要做一盘可乐鸡翅,需要先把鸡翅找出来。数据分析也是同样的道理,你要分析什么,首先要把对应的数据筛选出来。

常规的数据选择主要有列选择、行选择、行列同时选择三种方式。

列选择

选择某一列/某几列

在Excel中选择某一列直接用鼠标选中这一列即可;如果要同时选择多列,且待选择的列不是相邻的,这个时候就可以先选中其中一列,然后按住Ctrl键不放,再选择其他列。举个例子,同时选择客户姓名和成交时间这两列,如下图所示。

在Python中我们要想获取某列只需要在表df后面的方括号中指明要选择的列名即可。如果是一列,则只需要传入一个列名;如果是同时选择多列,则传入多个列名即可,多个列名用一个list存起来。

在Python中,我们把这种通过传入列名选择数据的方式成为普通索引

除了传入具体的列名,我们还可以传入具体列的位置,即第几列,对数据进行选取,通过传入位置来获取数据时需要用到iloc()方法。

在上面的代码中,iloc 后的方括号中逗号之前的部分表示要获取的行的位置,只输入一个冒号,不输入任何数值表示获取所有的行;逗号之后的方括号表示要获取的列的位置,列的位置同样是也是从0开始计数。

我们把这种通过传入具体位置来选择数据的方式称为位置索引

选择连续的某几列

在Excel中,要选择连续的几列时,直接用鼠标选中这几列即可操作。当然了,你也可以先选择一列,然后按住 Ctrl 键再去选择其他列,由于要选取的列是连续的,因此没必要这么麻烦。

在Python中可以通过前面介绍的普通索引和位置索引获取某一列或多列的数据。当你要获取的是连续的某几列,用普通索引和位置索引也是可以做到的,但是因为你要获取的列是连续的,所以只要传入这些连续列的位置区间即可,同样需要用到 iloc方法。

在上面的代码中,iloc 后的方括号中逗号之前的表示选择的行,当只传入一个冒号时,表示选择所有行;逗号后面表示要选择列的位置区间,0:3表示选择第1列到第4列之间的值(包含第1列但不包含第4列),我们把这种通过传入一个位置区间来获取数据的方式称为切片索引。

行选择

在Excel中选择行与选择列的方式是一样的,先选择一行,按住Ctrl键再选择其他行。

在Python中,获取行的方式主要有两种,一种是普通索引,即传入具体行索引的名称,需要用到loc方法;另一种是位置索引,即传入具体的行数,需要用到iloc方法。

为了让大家看得更清楚,我们对行索引进行自定义。

选择满足条件的行

前两节获取某一列时,获取的时这一列的所有行,我们还可以只筛选出这一列中满足条件的值。

比如年龄这一列,需要把非异常值(大于200属于异常值),即小于200岁的年龄筛选出来,该怎么实现呢?

在Excel中我们直接使用筛选功能,将满足条件的值筛选出来,筛选方法如下图所示。

筛选年龄小于200的数据前后的对比如下图所示。

在Python中,我们直接在表名后面指明哪列要满足什么条件,就可以把满足条件的数据筛选出来。

我们把上面这种通过传入一个判断条件来选择数据的方式称为布尔

索引。

传入的条件还可以是多个,如下为选择的年龄小于200且唯一识别码小于102的数据。

与 &

或 |

行列同时选择

上面的数据选择都是针对单一的行或列进行选择,实际业务中我们也会用到行、列同时选择,所谓的行、列同时选择就是选择出行和列的相交部分。

例如,我们要选择第二、三行和第二、三列相交部分的数据,下图中的阴影部分就是最终的选择结果。

行列同时选择在Excel中主要是通过鼠标拖曳实现的,与前面的单一行/列选择方法一致,此处不再赘述,接下来主要讲讲在Python中如何实现。

普通索引+普通索引选择指定的行和列

普通索引+普通索引就是通过同时传入行和列的索引名称进行数据选择,需要用到loc方法。

loc方法中的第一对方括号表示行索引的选择,传入行索引名称;loc方法中的第二对方括号表示列索引的选择,传入列索引名称。

位置索引+位置索引选择指定行和列

位置索引+位置索引是通过同时传入行、列索引的位置来获取数据,需要用到iloc方法。

在iloc方法中的第一对方括号表示行索引的选择,传入要选择行索引的位置;第二对方括号表示列索引的选择,传入要选择列索引的位置。行和列索引的位置都是从0开始计数。

布尔索引+普通索引选择指定行和列

布尔索引+普通索引是先对表进行布尔索引选择行,然后通过普通索引选择列。

上面的代码表示选择年龄小于200的订单编号和年龄,先通过布尔索引选择出年龄小于200的所有行,然后通过普通索引选择订单编号和年龄这两列。

切片索引+切片索引选择指定行和列

切片索引+切片索引是通过同时传入行、列索引的位置区间进行数据选择。

切片索引+普通索引选择指定行和列

前面我们说过,如果是普通索引,就直接传入行或列名,用loc方法即可;如果是切片索引,也就是传入行或列的位置区间,要用 iloc 方法。如果是切片索引+普通索引,也就是行(列)用切片索引,列(行)用普通索引,这种交叉索引要用ix方法。

小结

列选择
	选择某一列/某几列
		普通索引 df[["列1","列2",...]]
		位置索引 df[:,[0,2]] # 所有行 第1列和第3列
	选择连续的某几列
		位置索引 df[:,[0:3]] # 连续取第1~4列
行选择
	iloc 和 loc 如果只有一个值就是选择行
	loc 通过名称 df[["一","二",""三]] df["一":"三"]
	iloc 通过下标 df[[0,1,2]] df[0:3]
	ix 是结合了 loc和iloc
	选择符合条件的行 布尔索引
		df[df["年龄"]<200]
		df[(df["年龄"]<200) & (df["年龄"]>0)] 注意要加()
		与 & 或 | 

同时选择行和列
	布尔索引选择行 + 列选择
	df[布尔索引][普通索引、位置索引、标签索引]
	df[(df["年龄"]<200) & (df["年龄"]>0)][["订单编号","成交时间"]]
posted @ 2021-07-06 20:11  RowryCho  阅读(210)  评论(0编辑  收藏  举报