购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 表格的切片选择

Excel中对表格区域的选择比较简单,直接在工作表中单击行号和列标,或者使用Ctrl和Shift功能键配合单击拖曳,就能快速选择单元格区域,当然也可以在Excel的名称框中输入要选择的单元格地址来完成单元格区域的选择。

DataFrame表格的选择一般有行、列和区域这几种,可以通过切片、查找、筛选和循环等方式进行选择。本节主要讲解利用切片法和筛选法对DataFrame表格进行不同形式的选择,学好DataFrame表格的各种选择方法,是后续数据分析处理的重要基础,如果对DataFrame表格的选择都不熟练,数据分析就更无从谈起了。

4.2.1 切片法

切片法的基础结构为df[…],在此基础结构上进行变化,可以选择出行、列和区域。切片法的优点在于简单、直接,缺点在于表现形式不够多样化。

1.行选择

无论表格的行索引是否设置了标签,都可以按行索引序号选择行,示例代码如下:

选择前后的对比如图4-10所示。

图4-10 选择行前后对比效果(1)

除了使用行索引序号去选择行之外,也可以使用行索引的标签选择行,示例代码如下:

选择前后的对比如图4-11所示。

注意: 在使用切片法选择行时,无论是选择单行还是多行,选择的结果均返回DataFrame类型的表格。

图4-11 选择行前后对比效果(2)

2.列选择

列选择分为单列和多列,单列表示方法是df['列标签'],多列表示方法是df[['列标签1','列标签2','列标签3'…]]。

1)单列选择

单列选择不但可以表示成df['列标签'],还可以表示成df.列标签,示例代码如下:

选择前后的对比如图4-12所示。

图4-12 单列选择前后对比效果

2)多列选择

多列选择是将列索引标签放置在列表、数组和Series等数据结构中,最为常见的是放置在列表中,示例代码如下:

选择前后的对比如图4-13所示。

在多列选择时,用户可以自定义标签的位置,如果用户希望对表格的列顺序做调整,则这是一种不错的方法。

注意: 如果选择的是单列,则返回的是Series类型的数据;如果选择的是多列,则返回的是DataFrame类型的表格。

图4-13 多列选择前后对比效果

3.区域选择

区域选择就是多行多列的选择。也就是将行和列的选择交叉在一起,书写格式为df[行索引][列索引],从而形成选择表格部分区域的效果。下面做一个区域选择的演示,示例代码如下:

选择前后的对比如图4-14所示。

图4-14 区域选择前后对比效果

4.2.2 筛选法

使用筛选法来选择表格数据是一种常用的手段。Excel中的筛选功能十分强悍,Pandas中的筛选功能并不逊色于Excel,有些功能甚至更强大。本节使用的筛选法可以看作切片法的变异。筛选法只能选择行,不能选择列。

1.行选择

用筛选法来选择行,它的选择原理一直困扰着新手用户,接下来循序渐进地推演一下整个选择过程。

首先直接用布尔值(True和False)来选择行,示例代码如下:

选择前后的对比如图4-15所示。

图4-15 行选择前后对比效果

上面代码中最关键部分是df[[True,False,False,True,True]],在df[]中提供了一组布尔值,这组布尔值必须遵循以下两点要求。

(1)布尔值的元素个数必须与df表的行数相同,因为布尔值与df表的行是一一对应的,True表示选择,False表示不选择。

(2)布尔值必须存储在列表、数组和Series等数据结构中。

接下来以总分列为例做判断测试,判断总分列的数据是否大于或等于150,示例代码如下:

判断前后的对比如图4-16所示。

图4-16 返回布尔值对比

上面代码df['总分']>=150返回的结果是由布尔值组成的Series数据,将这个Series数据放置在df[]中,便得到最后的筛选结果,示例代码如下:

筛选行前后的对比如图4-17所示。

注意: 在上面例子中,布尔值是通过比较运算产生的,但不能只局限于通过比较运算产生布尔值,实际上任何能产生布尔值的操作均可。

图4-17 筛选行前后对比效果

2.列选择

Pandas没有提供对一行的值进行判断,从而达到筛选列的方式来选择列。有读者认为可以将表格转置,然后用判断列的方式来筛选行,完成之后再转置回去,我们不妨来转置一下,示例代码如下:

转置前后的对比如图4-18所示。

图4-18 转置前后对比效果

转置后列中的每个元素数据类型均不相同,没有任何可比性。这也是Pandas中没有列选择的原因。

3.区域选择

使用筛选方式选择行之后,再与选择的列进行交叉,也可以实现区域的选择,示例代码如下:

区域选择前后的对比如图4-19选择后所示。

注意: 在4.2.2节中讲解的筛选法,是通过判断表格中的数据来选择行,实际上也可以通过df.filter()筛选函数来选择行和列,此函数是通过判断行索引和列索引选择的。到现在为止,我们所学的知识还不足以全面讲解这个强大的函数,具体内容将会在8.6.4节详细讲解。

图4-19 区域选择前后对比效果

4.2.3 loc切片法

loc切片法相当于是直接切片法df[…]的升级版,功能比直接使用切片法更强大。表示方法为df.loc[行切片,列切片]。在此基础结构上进行变化,可以实现行、列和区域3种选择方法。

1.行选择

行的选择方式分为单行选择、连续多行选择和不连续多行选择3种选择方式。如图4-20所示,行选择的表示方式有两种,如果行索引为自然序号,则格式只能表示为df.loc[行索引序号];如果行索引为标签,则格式只能表示为df.loc['行索引标签']。这两种表示方式都会在下面的示例做演示。

图4-20 不同方式的行索引

1)单行选择

如果DataFrame表格的行索引是自然序号,则表示方式为df.loc[单个行索引序号];如果行索引是标签,则表示方式为df.loc['单个行索引标签'],示例代码如下:

运行结果如图4-21(a)所示。

运行结果如图4-21(b)所示。

图4-21 两种单行选择的结果

注意: 使用loc切片法选择的单行,返回结果不是DataFrame表格,而是Series数据。

2)连续多行选择

如果DataFrame表格的行索引是自然序号,则表示方法为df.loc[起始行索引序号:终止行索引序号];如果行索引是标签,则表示方法为df.loc[起始行索引标签:终止行索引标签],示例代码如下:

运行结果如图4-22(a)所示。

运行结果如图4-22(b)所示。

图4-22 两种连续多行选择的结果

3)不连续多行选择

将行索引对应的序号或者签标写入列表、数组和Series等数据结构中,序号或者签标可以不按顺序排列,示例代码如下:

运行结果如图4-23(a)所示。

运行结果如图4-23(b)所示。

图4-23 两种不连续多行选择的结果

不连续多行的选择,由于行索引对应的序号或者签标可以打乱顺序,所以做行的自定义排序,也不失为一种好的技巧。

2.列选择

列的选择方式分为单列选择、连续多列选择和不连续多列选择3种,如图4-24所示,列选择的表示方式有两种:一种列索引为自然序号,格式只能表示为df.loc[:,列索引序号];另一种列索引为标签,格式只能表示为df.loc[:,'列索引标签']。这两种表示方式都会在下面的示例做演示。

实际上loc切片法的完整表达方式为df.loc[行索引,列索引],其逗号(,)前面的冒号(:)表示选择所有行,所以不管是df.loc[:,列索引序号],还是df.loc[:,'列索引标签'],表示的意思都是选择指定列的所有行。

图4-24 两种方式的列索引

1)单列选择

如果DataFrame表格的列索引是自然序号,则表示方式为df.loc[:,单个列索引序号];如果列索列是标签,则表示方式为df.loc[:,'单个列索引标签'],示例代码如下:

运行结果如图4-25(a)所示。

运行结果如图4-25(b)所示。

图4-25 两种单列选择的对比结果

注意: 使用loc切片法选择的单列,返回结果不是DataFrame表格,而是Series数据。

2)连续多列选择

如果DataFrame表格的列索引是自然序号,则表示方式为df.loc[:,起始列索引序号:终止列索引序号];如果列索引是标签,则表示方式为df.loc[:,起始列索引标签:终止列索引标签],示例代码如下:

运行结果如图4-26(a)所示。

运行结果如图4-26(b)所示。

图4-26 两种连续多列选择的对比结果

3)不连续多列选择

将索引列对应的序号或者签标写入列表、数组和Series等数据结构中,序号或者签标可以不按顺序排列,示例代码如下:

运行结果如图4-27(a)所示。

运行结果如图4-27(b)所示。

图4-27 两种不连续多列选择的对比结果

不连续多列的选择,由于索引列对应的序号或者签标可以打乱顺序,所以做列的自定义排序,也不失为一种好的技巧。

3.区域选择

区域选择就是同时对行和列进行选择,它们交叉的区域就是最终要选择的区域。区域选择可以是任意行和列的组合形式。下面以图4-28所示的表格为例,罗列了常见的区域选择形式,示例代码如下:

图4-28 进行区域选择的DataFrame表格

4.2.4 iloc切片法

iloc切片法与loc切片法的用方法相似,但无论DataFrame表格的行列索引是自然序号还是标签,iloc都只能用索引序号来做切片。同时也不能像loc一样对DataFrame表格的行执行筛选。

前面详细讲解了DataFrame表格的各种切片方式,接下来对比总结一下各种切片方式的表达方式,利于读者对照学习,见表4-1所示。

表4-1 各种切片方式的表达方式

注意: 可以将筛选法理解为直接切片法和loc切片法的补充。筛选法可以在它们的行索引中应用。 irH20L0IF9Zd+zCflhpJw6RJc+zHeJAIJbcSQ6nMnCJI49GRmD88h+a9jhN7yeV9

点击中间区域
呼出菜单
上一章
目录
下一章
×