Pandas 查询数据
1. 前言
通过前面几个小节的学习,我们掌握了 Pandas 解析不同数据文件以及读取 MySQL 数据库的操作方法,接着分析了 Pandas 库中两个核心的数据结构 Series 和 DataFrame ,并掌握了他们常用的属性和操作方法。
前几节的学习让我们获取了数据,并认识了这些数据的特点,从这节开始,我们将学习如何对这些数据做进一步的处理。本节我们将学习 Pandas 查询数据,根据我们需要的条件,对已有的数据做查询操作。
2. 查询方法概述
Pandas 在解析数据时,会根据一定的条件进行解析处理,这种方式虽然在源数据上做了筛选,但实际的业务需求中,对解析出来的数据,我们会根据更加明确的条件和需要,去查询数据内容,为进一步的数据操作和分析做好铺垫。Pandas 中提供了多种查询函数,方便我们的数据查询操作,我们需要查询的数据条件不同,所采用的操作也有所不同,总的来说,我们的查询条件可以为按单个值查询、按值列表查询、按值区间查询、按条件表达式查询和按函数查询五种查询的方式,接下来我们将以 loc() 查询函数为例,详细讲解每种查询的具体操作。
Tips:loc() 的查询条件,可以使用label值,也可以使用布尔值,他丰富的传值方式,以及简洁的使用方式,成为 Pandas 数据查询较为常用的方法。
查询方法 | 简述 |
---|---|
loc( ) | 通过标签或布尔数字查询数据集 (推荐使用的查询方法) |
iloc( ) | 通过索引位来查询数据集 |
query( ) | 通过布尔表达式查询数据列 |
3. 查询方法操作
这里我们通过解析 Excel 数据文件,获得了数据,具体数据解析内容如下:
# 导入pandas包
import pandas as pd
# 指定导入的文件地址 默认是file,这里的路径中省略了 file:/
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data\_source/第7,8,9,10小节/execl数据demo.xlsx"
data = pd.read_excel(data_path)
print(data)
# --- 输出结果 ---
编程语言 推出时间 价格 主要创始人
0 java 1995年 45.6 James Gosling
1 python 1991年 67.0 Guido van Rossum
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
4 php 2012年 69.9 Rasmus Lerdorf
5 C++ 1983年 75.0 Bjarne Stroustrup
输出解析:可以看到解析后的数据结构是 DataFrame 的二维数据表,有行索引和列索引,接下来我们将通过多种查询方式,对该二维数据进行查询。
3.1 按单个值查询
在 loc() 函数中按单个值查询,我们的查询条件参数传入的是具体的单个 lable 值:
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[1])
# --- 输出结果 ---
编程语言 python
推出时间 1991年
价格 67
主要创始人 Guido van Rossum
Name: 1, dtype: object
输出解析: 这里可以看到 loc() 函数中,我们查询的数据条件是行索引值等于1的数据集,通过查询结果我们可以看到,输出的是 Series 一维数据结构,他列索引的值是我们二维数据的列索引值内容。
我们也可以查询出具体的单个数据值,通过传入两个 Label 值进行数据值的查询。
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[1,"价格"])
# --- 输出结果 ---
67.0 # 这里可以看到输出结果为具体的数据项值
Tips:loc() 多个查询值的传递,第一个参数选择 index (行索引值,最左侧一列),第二个参数选择 column(列索引值,最上面一行),如果参数传错,查询时汇报索引值查找错误。
如下面,我们将行索引和列索引的顺序颠倒,则会报错:
print(data.loc["价格",1])
# --- 输出结果 ---
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-17-b625c01645c5> in <module>
----> 1 print(data.loc["价格",1])
……
……
KeyError: '价格'
3.2 按列表查询
在 loc() 函数中,我们通过传入要查询的列表项,可以查询多个数据内容,返回的数据结果是 Series 数据结构或者 DataFrame 数据结构。
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[[1,2,5],["编程语言","价格"]])
# --- 输出结果 ---
编程语言 价格
1 python 67.0
2 C 33.9
5 C++ 75.0
输出解析: 我们传入两个查询列表 [1,2,5] 和 [“编程语言”,“价格”],可以看到查询的结果为二维数据结构的数据集。
3.3 按区间查询
按区间查询主要用到了英文状态下的冒号 “ : ” ,冒号左侧是区间的开始位置,右侧是结束位置。
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[0:5,["编程语言","价格"]])
# --- 输出结果 ---
编程语言 价格
0 java 45.6
1 python 67.0
2 C 33.9
3 js 59.5
4 php 69.9
5 C++ 75.0
输出解析: 这里的行索引我们传入的是区间 0:5,从结果中可以看到数据内容正是这5行的数据,其中是包含区间两端的值的。
这里的行索引和列索引都可以设置为区间查找:
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[3:5,"推出时间":"主要创始人"])
# --- 输出结果 ---
推出时间 价格 主要创始人
3 1995年 59.5 Brendan Eich
4 2012年 69.9 Rasmus Lerdorf
5 1983年 75.0 Bjarne Stroustrup
输出解析:通过设置区间为条件,可以看到查询的结果正是对应行索引和列索引所包含内的是数据。
3.4 按条件查询
按条件查询是查询数据符合一定条件的数据集,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)等条件。
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[data["价格"]<60])
# --- 输出结果 ---
编程语言 推出时间 价格 主要创始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
输出解析:这里的查询条件为价格小于60的数据,可以看到结果查询出了所有在价格上满足该条件的数据。
Tips:注意条件等于,要用双等于号 “ == ”,在程序中单个等于表示赋值,双等于表示运算。
除了单个条件,还可以传入多个条件,并通过运算符 &(与)表示两边条件都要满足、| (或)表示两边条件有一个满足就可以,进行多条件组合查询:
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[(data["价格"]<=69.9) & (data["推出时间"]=="1972年") ])
# --- 输出结果 ---
编程语言 推出时间 价格 主要创始人
2 C 1972年 33.9 Dennis MacAlistair Ritchie
输出解析:我们这里设置了两个条件,一个是价格小于等于69.9,另一个是推出时间等于1972年,这两个数据进行与运算,表示这两个条件都满足的数据。可以看到数据结果是同时满足了这两个条件的所有数据集。
3.5 按函数查询
函数查询是在查询的参数中传入函数,查询使该函数返回为 True 的数据集。
# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[data["推出时间"].isin(["1972年","1995年","1983年"])])
# --- 输出结果 ---
编程语言 推出时间 价格 主要创始人
0 java 1995年 45.6 James Gosling
2 C 1972年 33.9 Dennis MacAlistair Ritchie
3 js 1995年 59.5 Brendan Eich
5 C++ 1983年 75.0 Bjarne Stroustrup
输出解析:这里我们传入了一个函数 isin( ) 该函数接受一个列表,判断该列中元素是否在“推出时间 ”列表中 ,如果是就查询出该数据集,从结果可以看出,查询出了“推出时间”为1972年、1995年、1983年的数据集。当然,我们除了可以使用 Pandas 自带的一些函数,我们也可以自定义一些条件函数,传入参数进行查询。
4.小结
本节课我们主要学习了对解析后的数据,按照我们业务实际的需要进行数据的查询的方式,通过使用 loc() 查询函数,以及对应的查询参数,可以很好的满足我们数据的查询需要。本节课程的重点如下:
- 掌握 loc() 数据查询函数的使用方法;
- 掌握查询条件的五种类别,结合实际业务需求进行参数的传入。