包概述#

pandas 是一个 Python 包,提供快速、灵活且富有表现力的数据结构,旨在使处理“关系型”或“标记型”数据既简单又直观。它旨在成为 Python 实际的、现实世界**数据分析的基本高级构建块。此外,它还力求成为 **任何语言中最强大和最灵活的开源数据分析/处理工具。它已经在朝着这个目标迈进。

pandas 非常适合许多不同类型的数据:

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

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

  • 任意矩阵数据(同质类型或异质类型)带有行和列标签

  • 任何其他形式的观察/统计数据集。数据完全不需要标记就可以放入 pandas 数据结构中。

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

以下只是 pandas 做得好的几件事:

  • 在浮点数和非浮点数数据中,轻松处理 **缺失数据**(表示为 NaN)

  • 大小可变性:可以从 DataFrame 和高维对象中 插入和删除

  • 自动和显式的 数据对齐:对象可以显式地对齐到一组标签,或者用户可以简单地忽略标签,让 SeriesDataFrame 等在计算中自动对齐数据。

  • 强大的、灵活的 分组依据 功能,用于对数据集执行拆分-应用-合并操作,适用于数据的聚合和转换

  • 使其**易于转换**其他 Python 和 NumPy 数据结构中的不规则、不同索引的数据为 DataFrame 对象

  • 基于标签的智能 切片花式索引子集化 大型数据集

  • 直观的 合并连接 数据集

  • 灵活的 重塑 和数据集的透视

  • 分层 轴标签(每个刻度可以有多个标签)

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

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

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

其他一些注意事项

  • pandas 是 快速 的。许多低级算法部分已经在 Cython 代码中进行了广泛的调整。然而,与任何其他事物一样,泛化通常会牺牲性能。因此,如果你专注于应用程序的一个特性,你可能会创建一个更快的专用工具。

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

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

数据结构#

尺寸

名字

描述

1

系列

一维标记的同质类型数组

2

DataFrame

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

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

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

此外,我们希望常见的API函数具有合理默认行为,这些行为考虑到时间序列和横截面数据集的典型方向。当使用N维数组(ndarrays)存储二维和三维数据时,用户在编写函数时需要考虑数据集的方向;轴被认为是或多或少等价的(除了在性能方面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。感谢 所有我们的贡献者

如果你有兴趣贡献,请访问 贡献指南

pandas 是一个 NumFOCUS 赞助的项目。这将有助于确保 pandas 作为一个世界级的开源项目的开发成功,并使其能够 捐赠 给该项目。

项目治理#

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

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

开发团队#

核心团队成员的名单和更详细的信息可以在 pandas 网站 上找到。

机构合作伙伴#

当前机构合作伙伴的信息可以在 pandas 网站页面 上找到。

许可证#

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-2024, 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.