Python中根据索引过滤Pandas DataFrame

2025 年 1 月 5 日 | 12 分钟阅读

Pandas 数据框和索引简介

Pandas 库概述

Pandas 库是一个强大而著名的 Python 开源工具,用于数据操作和分析。它提供卓越的性能、易于使用的数据设计和数据分析工具。Pandas 的主要组成部分包括 Series(一维命名数组)和 DataFrames(二维标记数据结构),其中后者是本文讨论的重点。

数据框及其结构简介

数据框是具有命名行和段的水平数据结构,类似于电子表格或 SQL 表。它们允许以促进分析和计算的格式存储和操作数据。数据框中的每个段都是一个 Pandas Series,数据框本身是这些 Series 的集合,具有一个公共索引。

数据框的结构

  • 行和列:行表示单个观察或样本,而列包含与这些观察相关的特定值或特征。
  • 带标签的轴:行和列都带有标签,可以轻松直观地访问数据。行标签是索引的一部分,列名是列的一部分。
  • 异构数据类型:数据框可以在同一结构中保存不同类型(数字、字符串、布尔值等)的数据。

索引在 Pandas 数据框中的重要性

Pandas 数据框中的索引在数据排列、选择和控制中起着关键作用。它作为每一列的唯一标识符,允许在操作过程中进行高效的数据检索和排列。索引重要性的几个关键方面

  • 行标识:索引唯一标识数据框中的每一列。它提供了访问、筛选或更改特定行的引用。
  • 操作中的对齐:在数据框的算术操作或连接过程中,Pandas 根据索引对齐数据,确保行和列的正确排列。
  • 子集选择:排序允许根据特定情况或名称方便地选择数据子集。

理解 Pandas 中的索引

Pandas 中的索引是什么?

在 Pandas 中,索引是一种永久性的类似构造的展示,它作为 Series 和 DataFrames 的核心构建块。它为数据框中的每一列提供标签或标识符,从而促进高效的数据检索、排列和控制。

索引

  • 唯一标识行:数据框中的每一列都与索引中的名称相关联,允许快速访问特定行。
  • 不可变且同构:一般来说,索引是不可变的,这意味着一旦创建就无法更改。它们通常保存同构数据类型以实现高效的查询活动。
  • 可选且可定制:虽然数据框具有默认的基于数字的索引,但它们可以根据特定需求使用不同的名称或数据类型进行修改或替换。

索引类型:默认、自定义、分层

  • 默认索引:如果创建时未明确指定索引,Pandas 会自然地将数字索引(0, 1, 2, ...)分配给数据框。虽然实用,但此默认索引可能并非始终最具启发性或最有用。
  • 自定义索引:客户端可以为数据框定义和设置自定义索引,使用有意义的名称、时间戳、字符串或任何其他可哈希的 Python 对象作为索引值。这允许根据特定标识符更自然地访问列。
  • 分层索引(MultiIndex):Pandas 支持多级排序,为行启用多个级别的索引标记。这种类型的索引对于处理多方面或复杂的数据集很有用,其中列可以根据多个级别的渐进层次结构进行索引。

Pandas 中索引的属性和特征

  • 索引项:在 Pandas 中,索引由诸如 pd.Index 或特定类型(如 pd.DatetimeIndex、pd.RangeIndex 或 pd.MultiIndex)的对象表示,每种类型都提供独特的功能。
  • 索引对象的属性:索引对象具有名称、dtype 和 is_unique 等属性,提供有关索引的信息,例如其名称、数据类型以及标记是否唯一。
  • 索引技术:索引对象附带用于常见操作的方法,例如 isin()、extraordinary()、get_loc() 和 add(),从而实现索引标记的高效控制和查询。

Pandas 数据框中索引的基本操作

使用索引访问行和列

  • 通过索引标签访问行:Pandas 允许使用其索引名称恢复特定列。例如,使用 loc[] 可以通过其索引名称访问行,例如 df.loc['row_label']。
  • 通过索引访问列:虽然段不属于索引,但它们的名称是数据框段特征的重要组成部分。您可以使用它们的名称访问段,例如 df['column_name'] 或 df.column_name。

Pandas 数据框中的设置、重置和重新索引

  • 设置索引:set_index() 方法允许将特定条目设置为索引。例如,df.set_index('column_name') 将 'column_name' 设置为数据框索引。
  • 重置索引:相反,reset_index() 将索引返回到默认的基于整数的索引。它重置索引,使正在进行的索引成为常规条目。
  • 重新索引:Pandas 中的 reindex() 方法允许将数据框调整为新索引,添加缺失名称或删除现有名称。它对于根据新的一组索引名称调整数据很有用。

操作中的索引对齐和广播

  • 操作中的索引对齐:Pandas 在数据框或 Series 之间执行活动(扩展、扣除等)时,根据索引标记对齐数据。它确保元素根据其名称正确匹配,对齐行和列。
  • 广播:在执行涉及数据框和 Series 或标量值的任务时,Pandas 根据索引排列将操作传播到整个数据框。这对于逐元素应用操作特别有用。

基于 Pandas 中索引的筛选和选择

将布尔索引与索引标签一起使用

  • 布尔排序:Pandas 支持布尔排序,允许根据条件分离行。
  • 使用布尔掩码:例如,df[df['column_name'] > value] 创建一个布尔掩码来筛选段值满足特定条件的行。

根据索引条件筛选行

  • 使用索引标签筛选:通过将布尔排序应用于索引名称,可以根据特定索引名称筛选行。例如,df[df.index.isin(['label1', 'label2'])] 筛选带有索引标记 'label1' 或 'label2' 的行。
  • 条件筛选:根据索引条件进行分离涉及使用逻辑操作(and, |, ~)来组合索引标记的各种情况,从而实现复杂的筛选。

基于索引的选择和切片

  • 使用 .loc 选择行和列:.loc[] 访问器允许通过标记选择行和列。例如,df.loc['row_label', 'column_name'] 选择指定行和列交点处的特定元素。
  • 使用 .loc 进行切片:使用 .loc[] 进行切片可以根据其索引名称选择特定范围的行或列。例如,df.loc['row_label1':'row_label2'] 选择 'row_label1' 和 'row_label2' 之间的所有列。
  • 使用 .loc 进行切片:另一方面,.iloc[] 用于基于数字的索引。它通过其整数位置选择行和列,忽略索引标记。
  • 基于索引标记的筛选和确定为从 Pandas 数据框中提取特定数据子集提供了强大的手段,从而促进了高效的数据分析和检查。

Pandas 中的高级索引技术

多重索引和分层索引

  • MultiIndex 简介:MultiIndex 或渐进排序可以在行和列上进行多级排序。这对于处理复杂的多层数据集特别有用。
  • 创建 MultiIndex:利用 pd.MultiIndex.from_tuples()、pd.MultiIndex.from_arrays() 或 pd.MultiIndex.from_product() 方法创建 MultiIndex。这允许您定义不同级别的索引名称。

处理和操作 MultiIndex 数据框

  • 设置 MultiIndex:使用段列表应用 set_index() 来设置 MultiIndex。例如,df.set_index(['level1', 'level2']) 根据 'level1' 和 'level2' 列创建一个带有 MultiIndex 的数据框。
  • 使用 MultiIndex 索引:使用 .loc[] 进行 MultiIndex 的尖端排序。例如,df.loc['label1', 'label2'] 在 MultiIndex 数据框中选择特定元素。
  • 横截面切片 (xs):.xs() 方法允许横截面切片,使您可以在 MultiIndex 的特定级别选择数据,而忽略其他级别。

执行带有 MultiIndex 级别的操作

  • 堆叠和取消堆叠:stack() 和 unstack() 方法允许在宽和长组织之间重塑数据。堆叠将最深的段级别移动到最深的行级别,取消堆叠则相反。
  • MultiIndex 的算术运算:MultiIndex 允许在明确的级别上执行数学任务。这是通过在 add()、deduct()、duplicate() 和 separation() 等方法中包含级别边界来实现的。
  • 分组和聚合:MultiIndex 支持高级分组活动。您可以按一个或多个级别分组数据并执行聚合功能,例如 total()、mean() 或自定义累积功能。

索引维护和操作

添加、删除和重命名索引标签

  • 添加记录标记:Pandas 提供 affix() 等方法向现有 DataFrame 添加新的索引标签。例如,df.append(new_data) 添加具有指定记录标签的新列。
  • 删除索引标签:drop() 方法允许删除明确的记录标记或列。使用 df.drop(['label1', 'label2']) 删除索引标签为 'label1' 和 'label2' 的列。
  • 重命名索引标签:应用 rename() 方法修改记录标记。例如,df.rename(index={'old_label':'new_label'}) 将 'old_label' 重新标记为 'new_label'。

排序和重新排序索引标签

  • 排序索引标签:使用 sort_index() 以升序或降序排序记录标记。例如,df.sort_index(ascending=True) 以升序排序列表。
  • 重新排序记录标记:reindex() 方法根据预定列表的索引标签重新排序 DataFrame,插入缺失标记或删除无与伦比的标记。

重塑和转换索引级别

  • 重置索引:我们之前已经介绍过这一点,但值得再次强调。reset_index() 方法重置索引,将记录标记转换为常规段并重新分配默认的整数列表。
  • 级别操作:对于 MultiIndex DataFrames,Pandas 提供 swaplevel() 和 set_levels() 等方法来控制和调整 MultiIndex 的级别。
  • 维护和操作 Pandas DataFrames 中的索引标签有助于信息重建、清理和确保最佳组织,这些是信息预处理和分析管道中的关键步骤。

Pandas 中索引的性能和效率考虑

索引对计算效率的影响

  • 索引速度:有效利用记录标签可以显著加快信息检索和筛选操作。结构良好的索引可以减少访问特定行或段的时间复杂度。
  • 计算开销:然而,巨大或结构不佳的列表有时会带来计算开销,尤其是在执行跨索引的复杂任务或经常重新索引时。

选择正确的索引以获得最佳性能

  • 索引选择:考虑信息的性质和常规访问模式,以选择最合适的记录。数字、日期时间或直接输出的记录对于特定类型的操作通常更有效。
  • 索引策略:创建渐进或 MultiIndex 可以进一步提高特定用例的查询性能,尤其是在处理多方面信息时。

优化索引操作的技术

  • 索引维护:定期审查和推进记录,删除不必要的或多余的索引,并确保适当的排列以加快访问速度。
  • 缓存和内存管理:使用缓存工具或优化内存利用率,以最大程度地减少大型数据集上记录操作带来的开销。

实际应用和示例

数据分析中基于索引的操作案例研究

  • 时间序列分析:展示如何使用日期时间记录来调查时间序列信息、执行重采样和处理基于日期的估计。
  • 财务数据分析:调查索引操作如何用于分析证券市场数据、计算回报或执行投资组合增强。

实际示例展示索引在 Pandas 中的重要性

  • 连接和合并数据集:表示索引对于使用 Pandas 的 union() 功能合并不同数据集或根据记录标签连接 DataFrame 至关重要。
  • 数据清理和预处理:展示索引如何帮助识别和处理缺失或复制的值、重置记录以进行信息更改或重塑信息结构。

来自不同行业或领域的用例

  • 医疗保健分析:展示列表如何在分析患者记录、临床试验结果或急诊室管理数据集中发挥作用。
  • 电子商务或零售数据:解释列表在跟踪销售、库存管理和客户行为分析中的意义。

使用 Pandas 中索引的最佳实践和技巧

高效索引处理指南

  • 选择有意义的索引:选择表示唯一标识符的列表或帮助简化常规信息访问模式的列表,从而优化可读性和执行力。
  • 避免冗余索引:保证额外的文件不会复制帧中已有的数据,因为这会消耗内存并减慢操作速度。

常见陷阱及如何避免

  • 索引维护:定期审查和优化记录,删除不必要的或重复的文件,并确保适当的排列以加快访问速度。
  • 过度使用重置索引:虽然 reset_index() 很有用,但要避免不必要的重置和重新索引任务,因为它们会影响执行,尤其是在大型数据集上。

使用 Pandas 中的索引时优化代码的技巧

  • 使用向量化操作:尽可能利用 Pandas 的向量化任务,因为它们比 DataFrame 上的迭代操作更有效。
  • Pandas 的内置方法:探索并使用 Pandas 的内置方法进行列表处理和控制,因为它们针对执行进行了优化。

示例 1

输出

DataFrame with Custom Index:
            Name     Age
row1     Sai          4
row2     Pavan    5
row3    Kumar    6

示例 2

输出

Original Dataframe 
      Name    Age     Qualification
0   Vijay     22           BBA
1   Suraj       23           BCA
2   Rohit      25           BBA
3   Rahul   21           BBA
4   Mohit   27           MBA
5   Vishu   25           BCA
6   Rishi   26           MBA
7   Manoj   23           BBA
8   Naresh   22           BCA
9   Rohan   27           MBA
 Display only 5 index value 
     Name     Age      Qualification
5     Vishu       25           BCA
 Display only 5 and 8 index value 
      Name     Age      Qualification
5   Vishu        25           BCA
8   Naresh      21           BCA

示例 3

输出

Original Dataframe 
             Name  Age Qualification
Person_A   Vijay   22           BBA
Person_B   Sai   23           BCA
Person_AB  Rohit   25           BBA
Person_C   Rahul   21           BBA
Person_BC  Pavan   27           MBA
 display all indexes that contain Specific character 
             Name  Age Qualification
Person_B   Sai   23           BCA
Person_AB  Rohit   25           BBA
Person_BC  Pavan   27           MBA

结论

总之,Pandas 的索引不仅仅是一个标签;它是 DataFrame 中高效信息处理的支柱。探索排序策略,从默认到分层 MultiIndex,赋予特殊索引增强代码并巧妙地导航复杂信息场景的能力。索引的细致管理保证了计算效率和精确的分析结果,促进了跨行业的稳健信息工作流程。掌握排序有助于分析,开启洞察力并将原始信息转化为可操作的智慧。它仍然是一个无名英雄,以其谦逊的伪装,作为数据驱动叙事的无名英雄、沉默的架构师,在时间序列分析在金融领域以及揭示医疗保健数据集中复杂的相互关系等多样化的领域中发挥着影响力。

索引不仅仅是一个组件;它是解开信息复杂性的门户,促成明智的决策和非凡的发现。它的精妙之处不仅加速了计算过程,还塑造了数据集中的故事。在信息科学领域,索引的精通激发了兴趣,揭示了隐藏的模式,并引导了对信息的探索,使其成为揭示数据中隐藏的奥秘不可或缺的工具。