
3.5 数据抽取
数据分析过程中,并不是所有的数据都是我们想要的,此时可以抽取部分数据,主要使用DataFrame对象的loc属性和iloc属性,示意图如图3.27所示。

图3.27 loc属性和iloc属性示意图
对象的loc属性和iloc属性都可以抽取数据,区别如下。
loc属性:以列名(columns)和行名(index)作为参数,当只有一个参数时,默认是行名,即抽取整行数据,包括所有列,如df.loc['A']。
iloc属性:以行和列位置索引(即0,1,2,…)作为参数,0表示第1行,1表示第2行,以此类推。当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列。如抽取第1行数据,df.iloc[0]。
3.5.1 抽取一行数据
抽取一行数据主要使用loc属性。
【示例19】 抽取一行考试成绩数据。(示例位置:资源包\MR\Code\03\19)
抽取一行名为“明日”的考试成绩数据(包括所有列),程序代码如下:

运行程序,输出结果如图3.28所示。
使用iloc属性抽取第1行数据,指定行索引即可,如df.iloc[0],输出结果同图3.28一样。

图3.28 抽取一行数据
3.5.2 抽取多行数据
1.抽取任意多行数据
通过loc属性和iloc属性指定行名和行索引即可实现抽取任意多行数据。
【示例20】 抽取多行考试成绩数据。(示例位置:资源包\MR\Code\03\20)
抽取行名为“明日”和“高袁圆”(即第1行和第3行数据)的考试成绩数据,可以使用loc属性,也可以使用iloc属性,其输出结果都是一样的,主要代码如下:
01 df1=df.loc[['明日','高袁圆']] 02 df1=df.iloc[[0,2]]
运行程序,输出结果如图3.29所示。

图3.29 抽取多行数据
2.抽取连续任意多行数据
在loc属性和iloc属性中合理地使用冒号(:),即可抽取连续任意多行数据。
【示例21】 抽取连续几个学生的考试成绩。(示例位置:资源包\MR\Code\03\21)
抽取连续几个学生的考试成绩,主要代码如下:

运行程序,控制台输出结果如图3.30所示。

图3.30 抽取连续任意多行数据
3.5.3 抽取指定列数据
抽取指定列数据,可以直接使用列名,也可以使用loc属性和iloc属性。
1.直接使用列名
【示例22】 抽取“语文”和“数学”的考试成绩。(示例位置:资源包\MR\Code\03\22)
抽取列名为“语文”和“数学”的考试成绩数据,程序代码如下:

运行程序,输出结果如图3.31所示。
2.使用loc属性和iloc属性
前面介绍loc属性和iloc属性均有两个参数:第一个参数代表行;第二个参数代表列。那么这里抽取指定列数据时,行参数不能省略。
【示例23】 抽取指定学科的考试成绩。(示例位置:资源包\MR\Code\03\23)
下面使用loc属性和iloc属性抽取指定列数据,主要代码如下:

运行程序,控制台输出结果如图3.32所示。

图3.31 直接使用列名

图3.32 loc属性和iloc属性
3.5.4 抽取指定行、列数据
抽取指定行、列数据主要使用loc属性和iloc属性,这两个方法的两个参数都指定就可以实现指定行、列数据的抽取。
【示例24】 抽取指定学科和指定学生的考试成绩。(示例位置:资源包\MR\Code\03\24)
使用loc属性和iloc属性抽取指定行、列数据,程序代码如下:

运行程序,控制台输出结果如图3.33所示。

图3.33 抽取指定行、列数据
在上述结果中,第一个输出结果是一个数,不是数据,是由于“df.loc['七月流火','英语']”没有使用方括号[],导致输出的数据不是DataFrame类型。
3.5.5 按指定条件抽取数据
DataFrame对象实现数据查询有以下3种方式。
取其中的一个元素.iat[x,x]。
基于位置的查询,如.iloc[]、iloc[2,1]。
基于行、列名称的查询,如.loc[x]。
【示例25】 抽取指定学科和指定分数的数据。(示例位置:资源包\MR\Code\03\25)
抽取语文成绩大于105,数学成绩大于88的数据,程序代码如下:

运行程序,输出结果如图3.34所示。

图3.34 按指定条件抽取数据