这是解释如何使用 Python 代码处理数据表格的系列博客文章中的第三篇。这篇文章的主题是数据分析中最常见的操作之一:过滤表格。
最具影响力的分析来自最好的数据。使用 Python pandas 库过滤您的数据为您提供了两个重大优势:
- 定义过滤器的巨大能力和灵活性
- 标准化过滤过程,使其可以由其他人快速复制
如果您不熟悉 pandas 库,请查看 本博客系列的第 1 部分,基础知识。
本系列中的每一篇文章都附带一个 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 字符串用于定义过滤器。
- 过滤器定义为仅包含ProductSubcategoryName 列值为“Road Bikes”的 DataFrame 行,位于过滤器字符串中。
- 过滤后的数据将作为新的 DataFrame 返回,该 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” or ProductSubcategoryName = “Road Bikes” or 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 在 (“山地自行车”, “公路自行车”, “旅行自行车”) 中) 且 (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 在 Schedulicity、Data Science Dojo 和 Microsoft 提供了推动业务战略的见解。