文章目录
pandas是一个快速、强大、灵活且易于使用的开源数据分析和操作工具,构建在Python编程语言之上,其提供了快速、灵活和富有表达性的数据结构,旨在使得处理关系型或有标签的数据变得简单直观。它旨在成为在 Python 中进行实际的、真实的数据分析的基本高级构建块。 此外,它还有更广泛的目标,即成为任何语言中最强大、最灵活的开源数据分析/操作工具。 它已经在朝着这个目标迈进。
pandas可以处理多种不同类型的数据:
具有异构类型列的表格数据,如 SQL 表或 Excel 电子表格
有序和无序(不一定固定频率)的时间序列数据
具有行列标签的任意矩阵数据(同质或异构)
任何其他形式的观测/统计数据集。数据完全不需要标记就可以放入pandas数据结构中
pandas 两个主要的数据结构,Series
(一维)和 DataFrame
(二维),能够处理金融、统计、社会科学和许多工程领域的绝大多数典型用例。 对于 R 用户,DataFrame
提供了 R 的 data.frame
提供的一切甚至更多。 pandas 建立在 NumPy 之上,为的是能够在科学计算环境中与许多其他第三方库很好地集成。
以下是 pandas 擅长的一些事情:
轻松处理浮点和非浮点数据中的缺失数据(表示为
NaN
)大小可变性:可以从
DataFrame
和更高维对象中插入和删除列自动和显式数据对齐:对象可以显式对齐到一组标签,或者用户可以简单地忽略标签,让
Series
、DataFrame
等在计算中为你自动对齐数据强大、灵活的分组(group by) 功能,可对数据集执行拆分-应用-组合(split-apply-combine)操作,用于聚合和转换数据
轻松将其他 Python 和 NumPy 数据结构中的参差不齐、索引不同的数据转换为
DataFrame
对象基于标签的智能切片、花式索引和大型数据集的子集化
直观地合并和连接数据集
灵活地重塑和透视数据集
轴的分层标签(每个刻度可能有多个标签)
强大的 IO 工具,用于从普通文件(CSV 和特定符号分隔的文件)、Excel 文件、数据库加载数据,以及用超快的 HDF5 格式保存/加载数据
时间序列特定功能:日期范围生成和频率转换、移动窗口统计、日期偏移和滞后。
其中许多功能是为了解决使用其他语言/科学研究环境经常遇到的短板。对于数据科学家来说,处理数据通常分为多个阶段:整理和清洗数据,分析/建模数据,然后将分析结果组织成适合绘图或用表格显示的形式。pandas是完成所有这些任务的理想工具。
其他一些值得注意的:
pandas很快。 许多低级算法位已在 Cython 代码中进行了广泛的调整。 然而,与其他任何事物一样,泛化通常会牺牲性能。 因此,如果你专注于你的应用程序的一个功能,你可能能够创建一个更快的专用工具。
pandas 是 statsmodels 的依赖,使其成为 Python 统计计算生态系统的重要组成部分。
pandas 已广泛用于金融应用的生产中。
数据结构
维数 | 名称 | 描述 |
---|---|---|
1 | Series | 一维有标签的同质类型数组 |
2 | DataFrame | 具有同质或异构类型列的通用二维有标签的、大小可变的表格结构 |
为何不止一种数据结构?
理解pandas数据结构的最佳方式是将其视为低维数据的灵活容器。例如,DataFrame
是Series
的容器,Series
是标量的容器。 我们希望能够以类似字典的方式从这些容器中插入和删除对象。
此外,我们希望通用API函数的合理默认行为考虑到时间序列和横截面数据集的典型方向。当使用N维数组(ndarrays
)存储2维和3维数据时,用户在编写函数时需要考虑数据集的方向;轴或多或少被认为是等价的(除非C或Fortran连续性对性能有影响)。在pandas中,坐标轴希望为数据赋予更多语义含义,例如,对于特定的数据集,可能有一种“正确”的方式来确定数据的方向。 因此,目标是减少在下游函数中编写数据转换代码所需的脑力劳动量。
例如,对于表格数据(DataFrame
),考虑索引(行)和列而不是轴0和轴1在语义上更有帮助。因此,遍历DataFrame
的列会产生更具可读性的代码:
for col in df.columns:
series = df[col]
# do something with series
数据的可变性和复制
所有pandas数据结构都是值可变的(value-mutable,它们包含的值可以更改),但并不总是大小可变(size-mutable)。Series
的长度不能更改,但是,可以将列插入DataFrame
中。然而,绝大多数方法会生成新对象并且保持输入数据不变。一般来说,我们喜欢在合理的情况下支持不变性。