使用Python Pandas和NumPy创建条件列的方法

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

Python 是一种高级、解释型编程语言,以其清晰简洁而闻名。它由 Guido van Rossum 创建,并于 1991 年首次发布,通过其对大量空白的出色运用,强调代码的清晰性。Python 支持多种编程范式,包括过程式、面向对象和函数式编程。其动态类型和自动内存管理有助于快速开发和易于使用。Python 庞大的标准库以及众多第三方包的可用性使其能够灵活地用于各种应用,从 Web 开发和数据分析到人工智能和科学计算。Python 的社区驱动开发和广泛采用使其成为现代软件开发的核心。

Pandas

Pandas 是 Python 中一个强大而灵活的开源数据分析和操作库。它建立在 NumPy 之上,提供了用于无缝管理结构化数据的数据结构和功能。Pandas 的核心组件是 `Series` 和 `DataFrame` 对象。

  • Series:一个一维的、带标签的数组,能够存储任何数据类型。
  • DataFrame:一个二维的、大小可变的、可能异构的表格数据结构,具有带标签的轴(行和列)。

Pandas 的主要特点

  • 数据对齐:在操作中自动对齐数据,有效处理缺失数据。
  • 数据清理:提供用于清理和准备分析数据 T 工具。
  • 重塑和透视:支持对数据集进行重塑、透视和转换。
  • 数据聚合:通过执行对数据集的拆分-应用-组合操作的能力,提供强大的分组功能。
  • 时间序列分析:处理时间序列数据的强大工具。
  • 文件 I/O:轻松读取和写入多种文件格式(CSV、Excel、SQL、JSON 等)。

优点

  • 易用性
    • 用户友好的语法和函数。
    • 高级数据结构和操作工具。
  • 数据对齐:自动对齐不同数据集上的操作数据,简化了复杂的数据操作任务。
  • 处理缺失数据:处理缺失数据的强大工具,包括填充、替换和删除缺失值。
  • 数据集成:与 Python 环境中的其他库和工具轻松集成,包括 numpy、matplotlib 和 scikit-learn。
  • DataFrame 对象:DataFrame 对象用途广泛,支持复杂的数据操作,包括合并、连接和透视表。
  • 灵活的索引:支持基于标签和基于整数的索引,方便访问数据。
  • 分组功能:通过拆分、应用和组合数据的分组操作实现高级分组。
  • 时间序列数据:处理时间序列数据的强大工具,包括日期范围生成、频率转换、移动窗口数据等。
  • 输入/输出工具:以多种不同格式读取和写入数据,包括 CSV、Excel、SQL 数据库和 JSON。

NumPy

NumPy(Numerical Python)是 Python 中用于数值计算的基础库,提供对数组、矩阵和高级数学函数 T 的支持。NumPy 由 Travis Oliphant 于 2005 年开发,针对性能进行了高度优化,并广泛应用于数据科学、机器学习和科学计算。

NumPy 的主要特点

  • N 维数组:NumPy 中的主要数据结构是 ndarray,它是一个多维数组对象,对于数值运算 T 来说非常高效。
  • 广播:允许对不同形状的数组进行元素级操作。
  • 矢量化允许进行数组操作,而无需显式循环,从而 T 产生更简洁、更快的代码。
  • 数学函数:提供大量的数学函数 T 用于对数组进行运算。
  • 线性代数:包括线性代数、傅里叶变换和随机数生成 T 的函数。
  • 与 C/C++ 和 Fortran 的集成:便于与 C、C++ 和 Fortran 编写的代码集成,适用于高性能计算。

优点

  • 性能
    • 利用底层 C 和 Fortran 库,高效执行数值计算。
    • 与标准 Python 列表相比,对于大型数据集,性能 T 有显著提升。
  • 多维数组:支持 N 维数组,能够对大型数据集进行复杂数学运算。
  • 矢量化:允许进行矢量化操作,与 T 元素级操作的循环相比,速度更快,代码更简洁。
  • 广播:支持广播,允许对不同形状的数组进行算术运算。
  • 全面的数学函数:包含线性代数、随机数生成和傅里叶变换 T 的广泛数学函数库。
  • 互操作性:与其他科学计算库(如 pandas、scikit-learn、SciPy 和 matplotlib)无缝协作。
  • 内存效率:针对内存效率进行了优化,与 Python 列表相比,存储数据占用的内存更少。
  • 数组计算的标准:NumPy 数组(ndarray)是 Python 中数组计算的标准,许多其他库都使用 NumPy 数组作为其数据结构。
  • 成熟且维护良好:一个拥有庞大用户群、丰富文档以及持续维护和开发的成熟库。

创建条件列的各种方法

在 DataFrame 中创建条件列涉及对现有列应用条件,并使用这些条件生成新列值。以下是使用 Pandas 和 NumPy 实现此目的的几种方法。

方法 1:使用 Pandas `apply` 方法

`apply` 方法允许您沿着 DataFrame 的轴应用一个函数。

示例

输出

 
   A   B     C
0  1  10   Low
1  2  20   Low
2  3  30   Low
3  4  40  High
4  5  50  High   

说明

  • `apply` 方法用于将 `condition` 函数应用于 DataFrame 的每一行。
  • - 该函数评估列 `A` 中的值是否大于 3,并据此返回“High”或“Low”。
  • - 结果存储在新列 `C` 中。

方法 2:使用 NumPy `np.where` 方法

`np.where` 方法 T 基于条件执行元素级选择。

示例

输出

 
   A   B     C
0  1  10   Low
1  2  20   Low
2  3  30   Low
3  4  40  High
4  5  50  High   

说明

  • `np.where'` 函数用于创建新列 `C`。
  • 它检查列 `A` 中的值是否大于 3,并据此分配“High”或“Low”。

方法 3:使用 Pandas `loc` 方法

`loc` 方法用于通过标签或布尔数组访问一组行和列。

示例

输出

 
   A   B     C
0  1  10   Low
1  2  20   Low
2  3  30   Low
3  4  40  High
4  5  50  High   

说明

  • `loc` 方法用于根据条件为新列 `C` 分配值。
  • `A` 大于 3 的行被分配“High”,其他行被分配“Low”。

方法 4:使用 Pandas `assign` 方法

`assign` 方法允许以链式方式在 DataFrame 中创建新列。

示例

输出

 
   A   B     C
0  1  10   Low
1  2  20   Low
2  3  30   Low
3  4  40  High
4  5  50  High   

说明

  • `assign` 方法用于添加新列 `C`。
  • 使用 lambda 函数将 `np.where'` 应用于此条件,使代码更具可读性和链式性。

方法 5:使用 Pandas `mask` 方法

`mask` 方法 T 替换条件为 True 的值。

示例

输出

 
   A   B     C
0  1  10   Low
1  2  20   Low
2  3  30   Low
3  4  40  High
4  5  50  High   

说明

  • `mask` 方法用于替换列 `C` 中条件(`A` > 3)为 True 的值。
  • 最初,列 `C` 中的所有值都设置为“Low”。然后,`masks` 方法将在满足条件的地方将它们更改为“High”。