【数据分析】第四章 pandas简介(1)
4.1 pandas: Python 数据分析库
pandas 是一个专门为数据分析量身定制的开源Python库。在当今的Python数据科学界,无论是专业研究还是进行统计分析和决策,pandas都是每一位数据专业人士不可或缺的基础工具。
这个强大的库由 Wes McKinney 于2008年开始设计和开发。到了2012年,他的同事 Sien Chang 也加入了开发团队。正是他们二人的共同努力,造就了Python社区中最重要的库之一——pandas。
那么,为什么需要这样一个专门的库呢?因为数据分析工作需要一个能够以最简单、最直观的方式提供数据处理、数据抽取和数据操作所需全部工具的平台。开发pandas的初衷正是为了满足这一核心需求。
Wes McKinney做出了一个极具远见的决定:将 NumPy 库作为pandas的基础。事实证明,这一选择对于pandas的巨大成功和迅速普及起到了至关重要的作用。基于NumPy,不仅让pandas能够与大多数其他Python数据科学模块兼容,而且还充分利用了NumPy在数值计算方面卓越的性能优势。
另一个同样意义深远的决定是,pandas并没有沿用Python已有的内置数据结构,也没有依赖其他库的数据结构,而是为数据分析专门设计了两种全新的、高效的数据结构。这两种数据结构的设计初衷是为了更便捷地管理那些类似关系型数据库表或Excel工作表的数据,它们尤其适用于处理关系型或带有标签的数据。
在本书中,我们将接触一系列基础数据分析操作,它们通常都作用于数据库表或工作表。pandas提供了众多函数和方法来执行这些操作,在许多情况下,它们是实现这些任务的最佳方式。
因此,简单来说,pandas的核心目标就是为每一位数据分析师提供全面、高效的基础工具集。
4.2 安装
安装pandas库最简单和最常用的方法是首先安装一个Python发行版,例如 Anaconda 或 Enthought,然后通过该发行版来安装pandas。这些发行版通常会预打包好pandas及其所有依赖项,省去了手动配置的麻烦。
4.2.1 使用 Anaconda 安装
如果你选择使用 Anaconda 发行版,安装 pandas 将非常简单。
首先,我们可以检查你的环境中是否已经安装了 pandas,以及它的版本号。在终端或 Anaconda Prompt 中输入以下命令:
conda list pandas
如果你已经安装了 pandas,你可能会看到类似下面的输出(请注意,版本号可能与你当前的环境不同,此处仅为示例):
# packages in environment at C:\Users\YourUser\Anaconda3:
#
pandas 1.3.5 py39h6d944e8_0
如果你运行上述命令后没有看到类似的输出,或者想安装/更新到最新版本,你需要安装 pandas 库。请输入以下命令:
conda install pandas
Anaconda 会自动检查 pandas 的所有依赖库,并管理其他模块的安装,为你省去大量的配置工作。
如果将来你想更新 pandas 库到最新版本,命令也非常直接:
conda update pandas
Anaconda 会检查 pandas 及其所有依赖模块的版本。如果有更新的版本可用,它会提示你,并询问你是否想继续更新。你将看到类似这样的提示(具体包名和版本号会根据实际情况变化):
Fetching package metadata: ....
Solving package specifications:.Package plan for installation in environment C:\Users\Fabio\Anaconda3:The following NEW packages will be INSTALLED:pytz: 2023.3-py39_0requests: 2.31.0-py39_0six: 1.16.0-py39_0The following packages will be UPDATED:conda: 23.7.4-py39_0 -> 23.9.0-py39_0pandas: 1.3.5-py39_0 -> 2.1.1-py39_0pip: 23.2.1-py39_0 -> 23.3-py39_0scipy: 1.11.2-py39_0 -> 1.11.3-py39_0Proceed ([y]/n)?
敲入 y
键后,Anaconda 将开始从网上下载所有新的模块和依赖。因此,执行此步骤时,你的计算机需要保持网络连接。
Fetching packages...
scipy-1.11.3-p 100%###################################################| Time: 0:01:11 1.05 MB/s
Extracting packages...
[COMPLETE] |###################################################################| 100%
Unlinking packages ...
[COMPLETE] |###################################################################| 100%
Linking packages ...
[COMPLETE] |###################################################################| 100%
4.2.2 使用 PyPI 安装
除了 Anaconda,你也可以通过 Python 包索引(PyPI)来安装 pandas。这是 Python 生态系统中最常见的包安装方式,适用于没有使用 Anaconda 等发行版的用户。
pip install pandas
4.2.3 在 Linux 系统的安装方法
如果你使用的是特定的 Linux 发行版,并且不打算使用打包好的 Python 发行版(如 Anaconda),你可以像安装其他系统包那样安装 pandas。
-
对于 Debian 和 Ubuntu Linux 系统,使用以下命令:
sudo apt-get install python3-pandas
注意:在较新的Ubuntu/Debian版本中,Python 2.x 的包通常是
python-pandas
,而 Python 3.x 的包是python3-pandas
。我们此处使用python3-pandas
以确保安装Python 3.x版本兼容的pandas。
4.3 开始 pandas 之旅
本章的核心目标是解释 pandas 的数据结构以及用于处理这些数据结构的相关函数和方法,因此我们不需要编写大段的代码。
我建议大家在学习本章时,打开 Jupyter Notebook,逐条输入并执行命令。这样,你将有机会亲手操作并熟悉本章依次讲解的单个函数和数据结构。
此外,在整个本章中,前面例子中定义的数据和函数在后面仍然是有效的,你无需每次都重复定义。在每个例子结束后,我强烈鼓励你重复练习这些命令,并尝试做一些适当的修改。在操作过程中,请仔细观察如何操纵数据结构中的数据。这种交互式探索命令作用的学习方法,非常适合熟悉本章讲解的几项主要内容,它能帮助你避免机械地编写和执行代码,真正理解每个操作的含义。
注意:本章假定你对 Python 和 NumPy 有一定的了解。如果你在学习过程中遇到任何困难,请回顾前面的第2章(Python 基础)和第3章(NumPy 基础)。
首先,在 Python Shell 中启动一个会话,并导入 pandas 库。pandas 的常用导入约定如下:
>>> import pandas as pd
>>> import numpy as np
因此,在本书中,从此往后,当你看到 pd
时,它指代的是与 pandas 库相关的对象或方法;当你看到 np
时,它指代的是与 NumPy 库相关的对象或方法。
虽然你可能经常想使用以下方式导入 pandas 模块:
>>> from pandas import *
这样,你就不需要每次都用 pd.
前缀来指定函数、对象或方法。然而,通常来说,这种“全部导入”(import *
) 的方法在 Python 社区中被认为是不太好的实践,因为它可能会导致命名冲突,降低代码的可读性。所以我们推荐使用 import pandas as pd
的方式。
4.4 pandas 数据结构简介
pandas 的核心是其两大基础数据结构。所有与数据分析相关的任务,几乎都是围绕着这两种结构进行的:
-
Series(序列)
-
DataFrame(数据框)
正如我们稍后会详细介绍的,Series
这种数据结构用于存储一维数据,类似一个序列。而 DataFrame
作为更复杂的数据结构,则用于存储多维数据。
尽管这两种数据结构并非能解决所有问题,但它们为绝大多数数据分析应用提供了高效且强大的工具。就简洁性而言,它们理解和使用起来都非常简单。此外,许多更复杂的数据结构都可以追溯到这两种基础结构。
然而,这两种数据结构最独特和强大的地方在于,它们将 Index(索引)对象和标签无缝地整合到自己的结构中。你很快就会体会到,这一特性使得这两种数据结构具有极其强大的可操作性和灵活性。
4.4.1 Series 对象
pandas 库的 Series
对象用于表示一维数据结构,它与数组类似,但增加了额外的功能。它的内部结构非常简单(如图 4-1 所示),由两个相互关联的数组组成:
-
主数组:用于存放实际数据(可以是 NumPy 支持的任意类型数据)。
-
索引数组:存储