这是系列博客文章中的第三篇,介绍了如何使用 Python 代码处理数据表格。这篇文章的主题是在分析数据时执行的最常见操作之一:筛选表格。
最具影响力的分析源于最佳数据。使用 Python pandas 库筛选数据为您提供两大优势:
- 定义筛选器的强大功能和灵活性
- 标准化筛选过程,以便其他人可以快速重现
如果您不熟悉 pandas 库,请查看本博客系列的第一部分“基础知识”。
本系列中的每篇文章都附带一个 Microsoft Excel 工作簿,供您下载并用于培养技能。这篇文章的工作簿可在此处下载。
为方便起见,以下是本系列中所有博客文章的链接
注意:要重现本文中的示例,请安装 Excel 中的 Python 试用版。如果您喜欢本博客系列,请查看我的 Anaconda 认证课程,“使用 Excel 中的 Python 进行数据分析”。
筛选表格
作为 Excel 分析师,您执行的最常见操作之一是将数据表格筛选为您手头分析所需的数据子集。毫不奇怪,Microsoft Excel 为您提供了许多筛选表格的选项。
您对 Excel 筛选的了解使学习如何使用 Python 筛选数据表格变得简单直接。关键是将您的 Excel 筛选知识映射到如何使用 pandas 库实现相同的结果。
这篇博客文章将把三种最常见的 Excel 筛选场景映射到 Python 代码
- 筛选单个列中的单个值
- 筛选单个列中的多个值
- 筛选多列
单值筛选
假设您想要将 InternetSales 表格筛选为 ProductSubcategoryName 等于“Road Bikes”值的行。
使用 Excel 表格可以通过图形用户界面 (GUI) 轻松定义筛选器
图 1 – 使用单个值筛选 InternetSales 表格
在筛选器 GUI 中单击确定会将筛选器应用于 InternetSales 表格。虽然 Microsoft Excel GUI 对于定义和应用筛选器非常方便,但它们并不是筛选表格的唯一方法。
例如,您可以使用如下文本表示图 1 中描述的筛选器
- ProductSubcategoryName = “Road Bikes”
像上面这样使用文本表示形式来表示筛选器在编程语言(包括 Python)中很常见。
使用 Python 进行单值筛选
与 Microsoft Excel 类似,pandas 库提供了多种筛选数据表格的方法。但是,其中最有用的方法之一是使用 pandas DataFrame 类提供的 query() 方法。
query() 方法允许您定义文本筛选器并将其应用于您的数据。将返回包含筛选数据的新 DataFrame。
query() 方法非常强大,支持多种筛选 DataFrame 的方法。这篇博客文章将介绍使用 query() 的一些最常见方法。有关 query() 方法的更多信息,请查看在线文档。
这是一个使用 query() 筛选 InternetSales 表格的示例。
首先,使用 PY() 函数创建您的 Python 公式
图 2 – 调用 Excel PY() 函数
接下来,当您键入“(“时,单元格将指示它包含 Python 代码
图 3 – Excel Python 单元格
以下 Python 代码实现了筛选器
图 4 – 调用 query() 方法来筛选 internet_sales DataFrame
以下是上述 Python 代码的工作步骤
- query() 方法在 internet_sales DataFrame 对象上调用。
- Python 字符串用于定义筛选器。
- 筛选器定义为仅 DataFrame 中 ProductSubcategoryName 列值在筛选器字符串中为“Road Bikes”的行。
- 筛选后的数据作为新的 DataFrame 返回,并存储在 road_bikes 变量中。
查看图 4 中使用的筛选器时,有几点值得注意
- 在 Python 中,您使用双等号(即 ==)来检查值的等效性。这与 Excel 代码不同。
- 按照 Python 编码约定,字符串用单引号表示。图 4 中的整个筛选器字符串都用单引号括起来。
- 由于整个筛选器字符串都用单引号括起来,因此您必须使用双引号来定义字符串值“Road Bikes”。
在键盘上按 <Ctrl+Enter> 会运行 Python 代码并生成输出
图 5 – 图 4 的 Python 代码输出
要查看筛选后的数据框,请将鼠标悬停在卡片上
图 6 – 将鼠标悬停在卡片上
单击卡片将显示 road_bikes 的内容
图 7 – road_bikes DataFrame 的卡片
如图 7 所示,road_bikes DataFrame 仅包含公路自行车的数据行。
多值筛选
现在假设您想要将 InternetSales 表格筛选为 ProductSubcategoryName 等于“Road Bikes”、“Mountain Bikes”或“Touring Bikes”值的行。
使用 Excel GUI,您可以定义和应用筛选器
图 8 – 使用多个值筛选 InternetSales 表格
上面的 Excel 筛选器可以使用如下文本表示
- ProductSubcategoryName = “Mountain Bikes” 或 ProductSubcategoryName = “Road Bikes” 或 ProductSubcategoryName = “Touring Bikes”
Excel 筛选器更简洁的文本版本是
- ProductSubcategoryName in (“Mountain Bikes”, “Road Bikes”, “Touring Bikes”)
正如您可能已经猜到的那样,Python 代码看起来非常像上面的文本筛选器。
Python 中的多值筛选
以下是如何使用 query() 方法使用“or”定义多值筛选器
图 9 – 使用“or”调用 query() 和多值筛选器
注意:上面的 Python 代码使用多个字符串,每个字符串都用单引号括起来,以允许代码跨多行断开。这提高了代码的可读性。
虽然您可以通过链接“or”来构建多值筛选器,但通常使用“in”会更容易。以下 Python 代码等效于图 9 的代码
图 10 – 使用“in”调用 query() 和多值筛选器
执行上述任一 Python 公式都将生成一个名为 multi_bikes 的 DataFrame。如果您单击 multi_bikes 的卡片,您将看到以下内容
图 11 – multi_bikes DataFrame 的卡片
如图 11 所示,multi_bikes DataFrame 仅包含山地自行车、公路自行车和旅行自行车的数据。
多列筛选
InternetSales 表格当前已筛选为 ProductSubcategoryName 等于“Road Bikes”、“Mountain Bikes”或“Touring Bikes”值的行。
如果您想添加第二个筛选器,其中 SalesAmount 值大于 1,000 美元,Microsoft Excel GUI 可以轻松实现
图 12 – 向 SalesAmount 列添加数字筛选器
这个新筛选器可以用文本表示如下
在 Excel 中同时应用多列筛选器时,您正在增加筛选器的复杂性。Excel 将自动仅返回表格中两个筛选器同时为真的行。
在这种情况下,第一个筛选器必须为真
- ProductSubcategoryName in (“Mountain Bikes”, “Road Bikes”, “Touring Bikes”)
并且第二个筛选器必须为真
这两个筛选条件可以使用以下文本表示形式组合
- (ProductSubcategoryName in (“Mountain Bikes”, “Road Bikes”, “Touring Bikes”)) and (SalesAmount > 1000)
在上面的文本中,每个条件都用括号括起来,以确保每个筛选条件都单独评估。
Python 中的多列筛选
以下 Python 代码使用 query() 方法实现筛选器,该筛选器为 SalesAmount 列添加了数字条件
图 13 – 使用“and”调用 query() 和多列筛选器
执行上面的 Python 公式会生成新版本的 multi_bikes DataFrame。单击 multi_bikes 卡片会显示以下内容
图 14 – multi_bikes DataFrame 的卡片
如图 14 所示,multi_bikes DataFrame 包含两个筛选条件的交集——就像将多个 Microsoft Excel 筛选器应用于表格一样。
在这篇文章中,您学习了创建 DataFrame 筛选器的构建块。通过结合使用“or”、“in”和“and”,您可以构建复杂的筛选器,使您能够仅选择分析所需的数据行。
下一步是什么?
这篇博客文章简要介绍了筛选 pandas DataFrame。
pandas DataFrame 类在筛选表格方面提供了与 Microsoft Excel 相当的功能。此外,使用 Python 代码在灵活性和可重复性方面提供了优势。
本系列中的下一篇文章将向您介绍构建最佳数据分析的差异化因素之一:清理和整理数据。Python 在这方面为您提供了两个显着优势
- 高级分析(如机器学习)所需的数据整理技术
- 标准化您的整理过程,以便其他人可以快速重现
如果您想了解有关使用 pandas 处理数据表格的更多信息,请参加“pandas 数据分析入门”的初学者课程,并查看官方 pandas 用户指南。
免责声明:截至本文发布之时,Microsoft Excel 中的 Python 集成尚处于 Beta 测试阶段。功能和特性可能会发生变化。如果您发现此页面上有错误,请随时联系我们。
作者简介
Dave Langer 创立了 Dave on Data,他在那里提供为任何专业人士设计的培训,以培养数据分析技能。多年来,Dave 已经培训了数千名专业人士。此前,Dave 在 Schedulicity、Data Science Dojo 和 Microsoft 提供了推动业务战略的见解。