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  199545.6               James Gosling
1  python  199167.0            Guido van Rossum
2       C  197233.9  Dennis MacAlistair Ritchie
3      js  199559.5                Brendan Eich
4     php  201269.9              Rasmus Lerdorf
5     C++  198375.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  199559.5       Brendan Eich
4  201269.9     Rasmus Lerdorf
5  198375.0  Bjarne Stroustrup

输出解析:通过设置区间为条件,可以看到查询的结果正是对应行索引和列索引所包含内的是数据。

3.4 按条件查询

按条件查询是查询数据符合一定条件的数据集,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)等条件。

# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[data["价格"]<60])

# --- 输出结果 ---
   编程语言   推出时间    价格              主要创始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie
3    js  199559.5                Brendan Eich

输出解析:这里的查询条件为价格小于60的数据,可以看到结果查询出了所有在价格上满足该条件的数据。

Tips:注意条件等于,要用双等于号 “ == ”,在程序中单个等于表示赋值,双等于表示运算。

除了单个条件,还可以传入多个条件,并通过运算符 &(与)表示两边条件都要满足、| (或)表示两边条件有一个满足就可以,进行多条件组合查询:

# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[(data["价格"]<=69.9) & (data["推出时间"]=="1972年") ])

# --- 输出结果 ---
  编程语言   推出时间    价格         主要创始人
2    C  197233.9  Dennis MacAlistair Ritchie

输出解析:我们这里设置了两个条件,一个是价格小于等于69.9,另一个是推出时间等于1972年,这两个数据进行与运算,表示这两个条件都满足的数据。可以看到数据结果是同时满足了这两个条件的所有数据集。

3.5 按函数查询

函数查询是在查询的参数中传入函数,查询使该函数返回为 True 的数据集。

# 这里的 data 是上面我们从 Excel 中解析出来的数据
print(data.loc[data["推出时间"].isin(["1972年","1995年","1983年"])])

# --- 输出结果 ---
  编程语言   推出时间    价格             主要创始人
0  java  199545.6               James Gosling
2     C  197233.9  Dennis MacAlistair Ritchie
3    js  199559.5                Brendan Eich
5   C++  198375.0           Bjarne Stroustrup

输出解析:这里我们传入了一个函数 isin( ) 该函数接受一个列表,判断该列中元素是否在“推出时间 ”列表中 ,如果是就查询出该数据集,从结果可以看出,查询出了“推出时间”为1972年、1995年、1983年的数据集。当然,我们除了可以使用 Pandas 自带的一些函数,我们也可以自定义一些条件函数,传入参数进行查询。

4.小结

本节课我们主要学习了对解析后的数据,按照我们业务实际的需要进行数据的查询的方式,通过使用 loc() 查询函数,以及对应的查询参数,可以很好的满足我们数据的查询需要。本节课程的重点如下:

  • 掌握 loc() 数据查询函数的使用方法;
  • 掌握查询条件的五种类别,结合实际业务需求进行参数的传入。

图片描述

Tips:想要学习更多Pandas相关知识,可以点击
Pandas 新增数据
Pandas 删除数据
Pandas 修改数据