在本章中,我们将介绍如何安装 Pandas 并开始使用其基本功能。 本书的内容以 IPython 和 Jupyter 笔记本的形式提供,因此,我们还将快速使用这两种工具。
本书将利用 Continuum 的 Anaconda 科学 Python 发行版。 Anaconda 是流行的 Python 发行版,其中包含免费和付费组件。 Anaconda 提供了跨平台支持,包括 Windows,Mac 和 Linux。 Anaconda 的基本发行版安装了 Pandas,IPython 和 Jupyter 笔记本,因此入门非常简单。
本章将涵盖以下主题:
- 安装 Anaconda,Pandas 和 IPython/Jupyter 笔记本
- 使用 IPython 和 Jupyter 笔记本
- Jupyter 及其笔记本
- 设置您的 Pandas 环境
- Pandas
Series
和DataFrame
快速入门 - 从 CSV 文件加载数据
- 生成 Pandas 数据的可视化
本书将使用 Anaconda Python 版本 3,特别是 3.6.1。 在撰写本文时,Pandas 的版本为 0.20.2。 默认情况下,Anaconda 安装程序将安装 Python,IPython,Jupyter 笔记本和 pandas。
可以从 Continuum Analytics 网站下载 Anaconda Python。 Web 服务器将识别您的浏览器的操作系统,并为您提供该平台的相应软件下载文件。
在浏览器中打开此 URL 时,将看到一个类似于以下内容的页面:
单击适合您平台的安装程序的链接。 这将为您提供类似于以下内容的下载页面:
下载 3.x 安装程序。 本书将使用的当前版本的 Anaconda 是 4.3.1,带有 Python 3.6.1:
这种情况经常发生变化,到您阅读本文时,它可能已经发生变化。
执行适合您平台的安装程序,完成后,打开命令行或终端并执行python
命令。 您应该看到类似于以下内容(在 Mac 上是这样):
您可以通过发出exit()
语句退出 Python 解释器:
在终端或命令行中,您可以使用pip show pandas
命令验证 Pandas 的安装版本:
已安装的当前版本被验证为 0.20.2。 请确保您使用的是 0.20.2 或更高版本,因为将使用此版本特定于 Pandas 的更改。
现在,我们已经安装了所需的一切,让我们继续使用 IPython 和 Jupyter 笔记本。
到目前为止,我们已经从命令行或终端执行了 Python。 这是 Python 随附的默认读取-求值-打印-循环(REPL)。 这可以用来运行本书中的所有示例,但是本书将使用 IPython 编写文本和代码包 Jupyter 笔记本中的语句。 让我们简要地看一下两者。
IPython 是用于与 Python 交互工作的备用 Shell。 它对 Python 提供的默认 REPL 进行了一些增强。
如果您想更详细地了解 IPython,请查看文档。
要启动 IPython,只需从命令行/终端执行ipython
命令。 启动时,您将看到类似以下内容:
输入提示显示In [1]:
。 每次在 IPython REPL 中输入一条语句时,提示中的数字都会增加。
同样,您输入的任何特定条目的输出都将以Out [x]:
开头,其中x
与相应的In [x]:
的编号匹配。 以下屏幕截图演示了这一点:
in
和out
语句的编号对于示例很重要,因为所有示例都将以In [x]:
和Out [x]:
开头,以便您可以继续学习。
请注意,这些数字纯粹是连续的。 如果您遵循文本中的代码,并且输入中发生错误,或者输入其他语句,则编号可能会不正确(可以通过退出并重新启动 IPython 来重新设置编号)。 请纯粹将它们用作参考。
Jupyter 笔记本是 IPython 笔记本的演变。 它是一个开源 Web 应用,使您可以创建和共享包含实时代码,方程式,可视化和减价的文档。
最初的 IPython 笔记本仅限于 Python。 Jupyter 笔记本已发展为允许使用多种编程语言,包括 Python,R,Julia,Scala 和 F#。
如果您想更深入地了解 Jupyter 笔记本,请访问该页面,在该页面上将显示类似于以下内容的页面:
Jupyter 笔记本可以独立于 Python 下载和使用。 Anaconda 默认安装。 要启动 Jupyter 笔记本,请在命令行或终端上发出以下命令:
$ Jupyter 笔记本
为了演示,让我们看一下如何运行文本附带的示例代码。 从 Packt 网站下载代码,然后将文件解压缩到您选择的目录中。 在目录中,您将看到类似于以下内容的以下内容:
现在发出jupyter notebook
命令。 您应该看到类似于以下内容:
将打开一个浏览器页面,显示 Jupyter 笔记本主页,即http://localhost:8888/tree
。 这将打开一个显示该页面的 Web 浏览器窗口,该窗口将是类似于以下内容的目录列表:
单击.ipynb
链接可打开笔记本页面。 如果打开本章的笔记本,您将看到类似于以下内容:
显示的笔记本是 Jupyter 和 IPython 生成的 HTML。 它由许多单元格组成,可以是四种类型之一:代码,Markdown,原始 nbconvert 或标题。 本书中的所有示例均使用代码或减价单元。
Jupyter 为每个笔记本运行一个 IPython 内核。 包含 Python 代码的单元在该内核中执行,结果作为 HTML 添加到笔记本中。
双击任何单元格将使该单元格可编辑。 编辑完单元格的内容后,按Shift + Enter
,此时 Jupyter/IPython 将求值内容并显示结果。
如果您想进一步了解构成页面基础的笔记本格式,请参阅这里。
笔记本顶部的工具栏为您提供了许多操作笔记本的功能。 其中包括在笔记本中上下移动,增加和删除单元格。 还提供用于运行单元,重新运行单元以及重新启动基础 IPython 内核的命令。
要创建一个新笔记本,请转到“新笔记本 -> Python3”:
将在新的浏览器选项卡中创建一个新的笔记本页面。 其名称将为无标题:
笔记本包含一个准备好输入 Python 的代码单元。 在单元格中输入1 + 1
并按Shift + Enter
执行。
该单元已执行,结果显示为Out [1]:
。 Jupyter 还打开了一个新单元,供您输入更多代码或减价。
Jupyter 笔记本会每分钟自动保存您的更改,但是偶尔一次手动保存仍然是一件好事。
让我们开始使用一些 Pandas,并简要介绍一下 Pandas 的两个主要数据结构Series
和DataFrame
。 我们将检查以下内容:
- 将 Pandas 导入您的应用
- 创建和操纵 Pandas
Series
- 创建和操纵 Pandas
DataFrame
- 将数据从文件加载到
DataFrame
我们将使用的每个笔记本都首先导入 Pandas 和其他几个有用的 Python 库。 它还将设置几个选项来控制 Pandas 如何在 Jupyter 笔记本中渲染输出。 该代码包含以下内容:
第一条语句导入 NumPy 并将库中的项目引用为np.
。 在本书中,我们不会对 NumPy 进行详细介绍,但有时需要使用。
第二次导入使 Pandas 可用于笔记本。 我们将使用pd.
前缀引用库中的项目。 from pandas import Series, DataFrame
语句将Series
和DataFrame
对象显式导入到全局名称空间中。 这使我们可以在没有pd
的情况下引用Series
和DataFrame
。 字首。 这很方便,因为我们会经常使用它们,这样可以节省很多键入时间。
import datetime
语句引入了datetime
库,该库通常在 Pandas 中用于时间序列数据。 它将包括在每个笔记本的导入中。
pd.set_option()
函数调用设置选项,这些选项通知笔记本如何显示 Pandas 的输出。 第一个告诉状态将Series
和DataFrame
输出呈现为文本而不是 HTML。 接下来的两行指定要输出的最大列数和行数。 final 选项设置每行中输出的最大字符数。
敏锐的眼睛可能会注意到此单元格没有Out [x]:
。 并非所有单元(或 IPython 语句)都会生成输出。
如果您希望使用 IPython 代替 Jupyter 笔记本进行后续操作,则还可以在 IPython Shell 中执行此代码。 例如,您可以简单地从笔记本单元中剪切并粘贴代码。 这样做可能如下所示:
IPython shell 足够聪明,可以知道您要插入多行并且会适当缩进。 并且请注意,在 IPython shell 中也没有Out [x]:
。 pd.set_option
不返回任何内容,因此没有注释。
Pandas Series
是 Pandas 的基本数据结构。 序列与 NumPy 数组相似,但是它的不同之处在于具有索引,该索引允许对项目进行更丰富的查找,而不仅仅是从零开始的数组索引值。
以下从 Python 列表创建一个序列。:
输出包括两列信息。 第一个是索引,第二个是Series
中的数据。 输出的每一行代表索引标签(在第一列中),然后代表与该标签关联的值。
由于创建此Series
时未指定索引(接下来将要执行的操作),因此 pandas 自动创建一个整数索引,该索引的标签从 0 开始,对于每个数据项加 1。
然后,可以使用[]
运算符访问Series
对象的值,并传递所需值的标签。 以下内容获取标签1
的值:
这看起来很像许多编程语言中的常规数组访问。 但是,正如我们将看到的那样,索引不必从 0 开始,也不必递增 1,并且可以是许多数据类型,而不仅仅是整数。 以这种方式关联灵活索引的能力是 Pandas 的巨大超级能力之一。
通过在 Python 列表中指定它们的标签,可以检索多个项目。 以下内容检索标签1
和3
上的值:
通过使用index
参数并指定索引标签,可以使用用户定义的索引创建Series
对象。 下面的代码创建一个Series
,其值相同,但索引由字符串值组成:
现在,那些字母数字索引标签可以访问Series
对象中的数据。 以下内容检索索引标签'a'
和'd'
上的值:
仍然可以通过基于[0]的数字位置引用此Series
对象的元素。 :
我们可以使用.index
属性检查Series
的索引:
索引实际上是一个 Pandas 对象,此输出向我们显示了索引的值和用于索引的数据类型。 在这种情况下,请注意索引中的数据类型(称为dtype
)是对象而不是字符串。 我们将在本书的后面部分研究如何更改此设置。
Series
在 Pandas 中的常见用法是表示将日期/时间索引标签与值相关联的时间序列。 下面通过使用pd.date_range()
pandas 函数创建日期范围来说明这一点:
这在 Pandas 中创建了一个称为DatetimeIndex
的特殊索引,这是一种特殊的 Pandas 索引,经过优化可对带有日期和时间的数据进行索引。
现在,让我们使用该索引创建一个Series
。 数据值表示特定日期的高温:
这种带有DateTimeIndex
的序列称为时间序列。
我们可以使用日期作为字符串来查询特定数据的温度:
两个Series
对象可以通过算术运算相互应用。 以下代码创建第二个Series
并计算两者之间的温度差:
对两个非标量值的Series
对象进行算术运算(+,-,/,*,...)的结果将返回另一个Series
对象。
由于索引不是整数,因此我们还可以通过从 0 开始的值来查找值:
最后,Pandas 提供了许多描述性的统计方法。 例如,以下内容返回温度差的平均值:
Pandas Series
只能与每个索引标签关联一个值。 要使每个索引标签具有多个值,我们可以使用一个数据帧。 一个数据帧代表一个或多个按索引标签对齐的Series
对象。 每个序列将是数据帧中的一列,并且每个列都可以具有关联的名称。
从某种意义上讲,数据帧类似于关系数据库表,因为它包含一个或多个异构类型的数据列(但对于每个相应列中的所有项目而言都是单一类型)。
以下创建带有两列的DataFrame
对象,并使用温度Series
对象:
产生的数据帧有两列,分别为Missoula
和Philadelphia
。 这些列是数据帧中包含的新Series
对象,具有从原始Series
对象复制的值。
可以使用带有列名或列名列表的数组索引器[]
访问DataFrame
对象中的列。 以下代码检索Missoula
列:
下面的代码检索Philadelphia
列:
列名称的 Python 列表也可以用于返回多个列:
与Series
对象相比,DataFrame
对象存在细微的差异。 将列表传递给DataFrame
的[]
运算符将检索指定的列,而Series
将返回行。
如果列名没有空格,则可以使用属性样式进行访问:
数据帧中各列之间的算术运算与多个Series
上的算术运算相同。 为了演示,以下代码使用属性表示法计算温度之间的差异:
只需通过使用数组索引器[]
表示法将另一Series
分配给一列即可将新列添加到DataFrame
。 以下内容在DataFrame
中添加了带有温度差的新列:
可通过.columns
属性访问DataFrame
中的列名:
可以切片DataFrame
和Series
对象以检索特定的行。 以下是第二到第四行温度差值的切片:
可以使用.loc
和.iloc
属性检索数据帧的整个行。 .loc
确保按索引标签查找,其中.iloc
使用从 0 开始的位置。
以下内容检索数据帧的第二行:
请注意,此结果已将行转换为Series
,数据帧的列名称已透视到结果Series
的索引标签中。 下面显示了结果的结果索引:
可以使用.loc
属性通过索引标签显式访问行。 以下代码通过索引标签检索一行:
可以使用整数位置列表选择DataFrame
对象中的特定行。 以下从Difference
列的整数位置1
,3
和5
的行中选择值:
可以基于应用于每行中数据的逻辑表达式来选择数据帧的行。 以下显示Missoula
列中大于82
度的值:
然后可以将表达式的结果应用于数据帧(和序列)的[]
运算符,这仅导致返回求值为True
的表达式的行:
该技术在 pandas 术语中称为布尔选择,它将构成基于特定列中的值选择行的基础(例如在 SQL 中使用WHERE
子句的查询 -- 但我们将看到它更强大)。
Pandas 库提供了方便地从各种数据源中检索数据作为 Pandas 对象的工具。 作为一个简单的例子,让我们研究一下 Pandas 以 CSV 格式加载数据的能力。
本示例将使用随本书的代码data/goog.csv
提供的文件,该文件的内容表示 Google 股票的时间序列财务信息。
以下语句使用操作系统(从 Jupyter 笔记本或 IPython 内部)显示此文件的内容。 您将需要使用哪个命令取决于您的操作系统:
可以使用pd.read_csv()
函数将这些信息轻松导入DataFrame
:
pandas 不知道文件中的第一列是日期,并且已将Date
字段的内容视为字符串。 可以使用以下 pandas 语句对此进行验证,该语句以字符串形式显示Date
列的类型:
the pd.read_csv()
函数的parse_dates
参数可指导 Pandas 如何将数据直接转换为 Pandas 日期对象。 以下通知 Pandas 将Date
列的内容转换为实际的TimeStamp
对象:
如果我们检查它是否有效,我们会看到日期为Timestamp
:
不幸的是,这没有使用日期字段作为数据帧的索引。 而是使用默认的从零开始的整数索引标签:
请注意,这现在是RangeIndex
,在以前的 Pandas 版本中,它应该是整数索引。 我们将在本书的后面部分探讨这种差异。
可以使用pd.read_csv()
函数的index_col
参数将其固定,以指定应将文件中的哪一列用作索引:
现在索引是DateTimeIndex
,它使我们可以使用日期查找行。
我们将在第 14 章“可视化”中深入研究可视化,但是在此之前,我们偶尔会对 Pandas 中的数据进行快速可视化。 使用 Pandas 创建数据可视化非常简单。 所有需要做的就是调用.plot()
方法。 下面通过绘制股票数据的Close
值进行演示:
在本章中,我们安装了 Python 的 Anaconda Scientific 版本。 这还将安装 pandas 和 Jupyter 笔记本,为您设置执行数据处理和分析的环境,并创建用于可视化,呈现和共享分析的笔记本。
我们还对 Pandas Series
和DataFrame
对象进行了介绍,展示了一些基本功能。 该博览会向您展示了如何执行一些基本操作,以便在深入学习所有细节之前可以用来启动和运行 Pandas。
在接下来的几章中,我们将深入研究Series
和DataFrame
的操作,下一章将重点介绍Series
。