包概述#

pandas 是一个 Python 包,提供快速、灵活且富有表现力的数据结构,旨在使处理“关系型”或“标记型”数据变得简单直观。它旨在成为在 Python 中进行实际的、现实世界**数据分析的根本性高级构建块。此外,它还有一个更广泛的目标,即成为**任何语言中最强大、最灵活的开源数据分析/操作工具。它已经在实现这一目标的道路上取得了长足的进步。

pandas 适用于许多不同类型的数据:

  • 具有异构类型列的表格式数据,如同 SQL 表或 Excel 电子表格

  • 有序和无序(不一定固定频率)的时间序列数据。

  • 具有行和列标签的任意矩阵数据(同类或异类)。

  • 任何其他形式的观测/统计数据集。数据不必有标签即可放入 pandas 数据结构中。

pandas 的两个主要数据结构 Series (一维)和 DataFrame (二维)处理了金融、统计、社会科学和许多工程领域中绝大多数典型用例。对于 R 用户来说,DataFrame 提供了 R 的 data.frame 所提供的所有功能,还有更多。pandas 构建在 NumPy 之上,旨在与许多其他第三方库一起在科学计算环境中良好集成。

以下是 pandas 擅长的一些事情:

  • 轻松处理浮点值及非浮点值数据中的**缺失数据**(表示为 NaN)

  • 大小可变性:可以在 DataFrame 和更高维对象中**插入和删除**列

  • 自动和显式**数据对齐**:可以将对象显式对齐到一组标签,或者用户可以忽略标签,让 SeriesDataFrame 等在计算中自动为您对齐数据

  • 强大灵活的**分组**(group by)功能,用于在数据集上执行拆分-应用-合并(split-apply-combine)操作,以进行数据聚合和转换

  • 轻松**转换**其他 Python 和 NumPy 数据结构中参差不齐、索引不同的数据为 DataFrame 对象

  • 对大型数据集进行智能的基于标签的**切片**、花式索引**和**子集选择

  • 直观地**合并(merging)**和**连接(joining)**数据集

  • 灵活地**重塑(reshaping)**和**透视(pivoting)**数据集

  • 轴的**分层**标签(允许每个刻度有多个标签)

  • 强大的 I/O 工具,用于从**平面文件**(CSV 和分隔符文件)、Excel 文件、数据库加载数据,以及从超快速的**HDF5 格式**保存/加载数据

  • **时间序列**专用功能:日期范围生成和频率转换、移动窗口统计、日期移位和滞后。

这些原则中的许多都是为了解决在使用其他语言/科学研究环境时经常遇到的不足之处。对于数据科学家来说,处理数据通常分为几个阶段:整理和清洗数据、分析/建模、然后将分析结果组织成适合绘图或表格显示的格式。pandas 是所有这些任务的理想工具。

其他一些说明

  • pandas 速度很快。许多底层算法都已在 Cython 代码中经过了广泛的优化。然而,与任何事物一样,泛化通常会牺牲性能。因此,如果您在应用程序中专注于某个功能,您可能会创建一种更快速的专用工具。

  • pandas 是 statsmodels 的依赖项,使其成为 Python 中统计计算生态的重要组成部分。

  • pandas 已在金融应用的生产环境中得到广泛使用。

数据结构#

维度

名称

描述

1

Series

1D 标签化的同质类型数组

2

DataFrame

通用的 2D 标签化、大小可变、可能包含异构类型列的表格结构

为什么需要多个数据结构?#

思考 pandas 数据结构的最佳方式是将它们视为低维数据的灵活容器。例如,DataFrame 是 Series 的容器,而 Series 是标量(scalars)的容器。我们希望能够以类似字典的方式向这些容器中插入和删除对象。

此外,我们希望常见的 API 函数具有合理的默认行为,这些行为会考虑到时间序列和横截面数据集的典型方向。在使用 N 维数组(ndarrays)存储 2D 和 3D 数据时,用户需要考虑数据集的方向来编写函数;轴被视为大体等效(除非 C 或 Fortran 连续性对性能很重要)。在 pandas 中,轴旨在赋予数据更多的语义含义;即,对于某个特定数据集,可能有一种“正确”的方式来定向数据。因此,目标是减少在下游函数中编写数据转换时所需的脑力劳动。

例如,对于表格数据(DataFrame),将**索引**(行)和**列**而不是轴 0 和轴 1 进行区分,在语义上更有帮助。因此,遍历 DataFrame 的列可以得到更易读的代码:

for col in df.columns:
    series = df[col]
    # do something with series

可变性与数据复制#

所有 pandas 数据结构的值都是可变的(它们包含的值可以被修改),但并非总是大小可变的。Series 的长度不可更改,但例如,可以在 DataFrame 中插入列。然而,绝大多数方法都会生成新对象,并保持输入数据不变。总的来说,我们倾向于在合理的情况下**偏向于不变性**。

获取支持#

pandas 问题和想法的第一个求助途径是 GitHub Issue Tracker 。如果您有一般性问题,pandas 社区专家可以通过 Stack Overflow 回答。

社区#

pandas 今天仍然得到来自世界各地志同道合的社区成员的支持,他们贡献宝贵的时间和精力,帮助开源 pandas 成为可能。感谢 all of our contributors

如果您有兴趣贡献,请访问 contributing guide

pandas 是一个 NumFOCUS 赞助的项目。这将有助于确保 pandas 作为世界一流的开源项目得到成功开发,并使得有可能向该项目 donate

项目治理#

pandas 项目自 2008 年成立以来非正式使用的治理流程在 Project Governance documents 中得到了正式化。这些文档阐明了决策是如何制定的,以及我们社区的各个元素是如何相互作用的,包括开源协作开发与可能由营利性或非营利性实体资助的工作之间的关系。

Wes McKinney 是终身仁慈独裁者 (BDFL)。

开发团队#

核心团队成员列表和更详细的信息可以在 pandas website 上找到。

机构合作伙伴#

有关当前机构合作伙伴的信息可以在 pandas website page 上找到。

许可证#

BSD 3-Clause License

Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
All rights reserved.

Copyright (c) 2011-2023, Open source contributors.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.