这是解释如何使用 Python 代码处理数据表格的系列博客文章中的第三篇。这篇文章的主题是数据分析中最常见的操作之一:过滤表格。
最具影响力的分析来自最好的数据。使用 Python pandas 库过滤您的数据为您提供了两个重大优势:
- 定义过滤器的巨大能力和灵活性
- 标准化过滤过程,使其可以由其他人快速复制
如果您不熟悉 pandas 库,请查看 本博客系列的第 1 部分,基础知识。
本系列中的每一篇文章都附带一个 Microsoft Excel 工作簿,可供下载和使用,以提升您的技能。本篇文章的工作簿可供 在此处下载。
为了方便起见,以下是本系列中所有博客文章的链接
- 第 1 部分 - 基础知识
- 第 2 部分 - 处理列
- 第 3 部分 - 过滤表格(本篇文章)
- 第 4 部分 - 数据清理和整理
- 第 5 部分 - 合并表格
**注意**:要复制本篇文章中的示例,安装Excel 中的 Python 试用版。如果您喜欢本博客系列,请查看我的 Anaconda 认证课程,使用 Excel 中的 Python 进行数据分析。
过滤表格
作为一名 Excel 分析师,您执行的最常见操作之一是过滤数据表格,以获得当前分析所需的数据子集。不出所料,Microsoft Excel 为您提供了许多过滤表格的选项。
您对 Excel 过滤的了解使您轻松学习如何使用 Python 过滤数据表格。关键是将您对 Excel 过滤的了解映射到使用 pandas 库实现相同结果的方式。
本博客文章将三个最常见的 Excel 过滤场景映射到 Python 代码
- 过滤单个列中的单个值
- 过滤单个列中的多个值
- 过滤多个列
单值过滤
假设您想将InternetSales 表格过滤到ProductSubcategoryName 等于“Road Bikes”的值的数据行。
使用 Excel 表格可以通过图形用户界面 (GUI)轻松定义过滤器
在过滤器 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 公式
接下来,当您键入“(”时,单元格将指示它包含 Python 代码
以下 Python 代码实现了过滤器
以下是如何逐步执行上述 Python 代码
- query() 方法在internet_sales DataFrame 对象上调用。
- Python 字符串用于定义过滤器。
- 过滤器定义为仅包含ProductSubcategoryName 列值为“Road Bikes”的 DataFrame 行,位于过滤器字符串中。
- 过滤后的数据将作为新的 DataFrame 返回,该 DataFrame 存储在road_bikes 变量中。
在查看图 4 中使用的过滤器时,需要注意一些事项
- 在 Python 中,使用双等号(即==)检查值是否相等。这与 Excel 代码不同。
- 根据 Python 编码惯例,字符串用单引号表示。图 4 中的整个过滤器字符串用单引号括起来。
- 由于整个过滤器字符串用单引号括起来,因此您必须使用双引号来定义“Road Bikes”的字符串值。
在键盘上按<Ctrl+Enter> 将运行 Python 代码并生成输出
要查看过滤后的数据帧,请将鼠标悬停在卡片上
单击卡片将显示road_bikes 的内容
如图 7 所示,road_bikes DataFrame 仅包含公路自行车的行数据。
多值过滤
现在假设您想将InternetSales 表格过滤到ProductSubcategoryName 等于“Road Bikes”、“Mountain Bikes”或“Touring Bikes”的值的数据行。
使用 Excel GUI,您可以定义和应用过滤器
上面的 Excel 过滤器可以使用如下文本表示
- ProductSubcategoryName = “Mountain Bikes” or ProductSubcategoryName = “Road Bikes” or ProductSubcategoryName = “Touring Bikes”
Excel 过滤器的更简洁的文本版本是
- ProductSubcategoryName in (“Mountain Bikes”, “Road Bikes”, “Touring Bikes”)
如您所料,Python 代码非常类似于上面的文本过滤器。
在 Python 中进行多值过滤
以下是如何使用query() 方法使用“or”定义多值过滤器的示例
**注意**:上述 Python 代码使用多个字符串,每个字符串都用单引号括起来,以使代码能够跨多行断开。这提高了代码的可读性。
虽然您可以通过将“or”链接在一起构建多值过滤器,但通常使用“in”更容易。以下 Python 代码等效于图 9 中的代码
执行上述任何 Python 公式都将生成名为multi_bikes 的 DataFrame。如果您单击multi_bikes 的卡片,您将看到以下内容
如图 11 所示,multi_bikes DataFrame 仅包含山地车、公路车和旅行车的行数据。
多列过滤
InternetSales 表格当前被过滤到ProductSubcategoryName 等于“Road Bikes”、“Mountain Bikes”或“Touring Bikes”的值的数据行。
如果您想添加第二个过滤器,其中SalesAmount 值大于 1,000 美元,Microsoft Excel GUI 使此操作变得很简单
此新过滤器可以用以下文本表示
- SalesAmount > 1000
在 Excel 中同时对多列应用过滤器时,您会增加过滤器的复杂性。Excel 将自动仅返回表格中两个过滤器都为真的行。
在本例中,第一个过滤器必须为真
- ProductSubcategoryName in (“Mountain Bikes”, “Road Bikes”, “Touring Bikes”)
第二个过滤器也必须为真
- SalesAmount > 1000
这两个过滤条件可以使用以下文本表示形式组合起来
- (ProductSubcategoryName 在 (“山地自行车”, “公路自行车”, “旅行自行车”) 中) 且 (SalesAmount > 1000)
在上面的文本中,每个条件都用括号括起来,以确保每个过滤条件都单独评估。
Python 中的多列过滤
以下 Python 代码使用query() 方法实现了一个过滤器,该方法为SalesAmount 列添加了一个数值条件。
执行上面的 Python 公式会生成一个新版本的multi_bikes DataFrame。单击multi_bikes 卡将显示以下内容。
如图 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 在 Schedulicity、Data Science Dojo 和 Microsoft 提供了推动业务战略的见解。