提交 2b50ee9b 编写于 作者: W wizardforcel

2020-07-14 17:57:51

上级 7240f4a8
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
在本节中,我们将讨论什么是 Anaconda 以及为什么使用它。 我们将提供一个链接,以显示从其赞助商 Continuum Analytics 的网站下载 Anaconda 的位置,并讨论如何安装 Anaconda。 Anaconda 是 Python 和 R 编程语言的开源发行版。 在本节中,我们将讨论什么是 Anaconda 以及为什么使用它。 我们将提供一个链接,以显示从其赞助商 Continuum Analytics 的网站下载 Anaconda 的位置,并讨论如何安装 Anaconda。 Anaconda 是 Python 和 R 编程语言的开源发行版。
在本书中,我们将专注于 Anaconda 专门用于 Python 的部分。 Anaconda 帮助我们将这些语言用于数据分析应用程序,包括大规模数据处理,预测分析以及科学和统计计算。 Continuum Analytics 为 Anaconda 提供企业支持,包括可帮助团队协作并提高其系统性能的版本,并提供一种部署使用 Anaconda 开发的模型的方法。 因此,Anaconda 出现在企业环境中,有抱负的分析师应该熟悉它的用法。 Anaconda 附带了本书中使用的许多软件包,包括 Jupyter,NumPy,pandas 以及其他许多数据分析中常用的软件包。 仅此一项就可以解释其受欢迎程度。 在本书中,我们将专注于 Anaconda 专门用于 Python 的部分。 Anaconda 帮助我们将这些语言用于数据分析应用,包括大规模数据处理,预测分析以及科学和统计计算。 Continuum Analytics 为 Anaconda 提供企业支持,包括可帮助团队协作并提高其系统性能的版本,并提供一种部署使用 Anaconda 开发的模型的方法。 因此,Anaconda 出现在企业环境中,有抱负的分析师应该熟悉它的用法。 Anaconda 附带了本书中使用的许多软件包,包括 Jupyter,NumPy,pandas 以及其他许多数据分析中常用的软件包。 仅此一项就可以解释其受欢迎程度。
Anaconda 的安装包括现成的数据分析所需的大部分内容。 Conda 软件包管理器还可用于下载和安装新软件包。 Anaconda 的安装包括现成的数据分析所需的大部分内容。 Conda 软件包管理器还可用于下载和安装新软件包。
...@@ -179,7 +179,7 @@ from sklearn.datasets import load_iris ...@@ -179,7 +179,7 @@ from sklearn.datasets import load_iris
``` ```
这是用于数据分析的非常常见的数据集。 它通常用作评估训练模型的一种方法。 我们还将在此上使用 k 均值聚类: 这是用于数据分析的非常常见的数据集。 它通常用作求值训练模型的一种方法。 我们还将在此上使用 k 均值聚类:
```py ```py
from sklearn.cluster import KMeans from sklearn.cluster import KMeans
...@@ -249,7 +249,7 @@ n ...@@ -249,7 +249,7 @@ n
# Rodeo # Rodeo
Rodeo 是 Yhat 开发的 Python IDE,专门用于数据分析应用程序。 它旨在模拟在 R 用户中很流行的 RStudio IDE,并且可以从 Rodeo 的网站上下载。 基本的 Python 解释器的唯一优点是每个 Python 安装程序都包含它,如下所示: Rodeo 是 Yhat 开发的 Python IDE,专门用于数据分析应用。 它旨在模拟在 R 用户中很流行的 RStudio IDE,并且可以从 Rodeo 的网站上下载。 基本的 Python 解释器的唯一优点是每个 Python 安装程序都包含它,如下所示:
![](img/e63f586b-c60a-49fe-9a52-dee69d209d6c.png) ![](img/e63f586b-c60a-49fe-9a52-dee69d209d6c.png)
...@@ -380,7 +380,7 @@ Windows 用户可以直接从其网站安装 MySQL。 您还应该注意,MySQL ...@@ -380,7 +380,7 @@ Windows 用户可以直接从其网站安装 MySQL。 您还应该注意,MySQL
# MySQL 连接器 # MySQL 连接器
MySQL 的功能类似于系统上的驱动程序,其他应用程序则与 MySQL 交互,就好像它是驱动程序一样。 因此,您将需要下载一个 MySQL 连接器,以便能够将 MySQL 与 Python 结合使用。 这将允许 Python 与 MySQL 通信。 您最终要做的是将其加载到程序包中,然后开始与 MySQL 的连接。 可以从 [MySQL 的网站](https://dev.mysql.com/downloads/connector/)下载 Python 连接器。 MySQL 的功能类似于系统上的驱动程序,其他应用则与 MySQL 交互,就好像它是驱动程序一样。 因此,您将需要下载一个 MySQL 连接器,以便能够将 MySQL 与 Python 结合使用。 这将允许 Python 与 MySQL 通信。 您最终要做的是将其加载到程序包中,然后开始与 MySQL 的连接。 可以从 [MySQL 的网站](https://dev.mysql.com/downloads/connector/)下载 Python 连接器。
该网页对于任何操作系统都是通用的,因此您需要选择适当的平台,例如 Linux,OS X 或 Windows。 无论您使用的是 32 位还是 64 位版本,都需要选择并下载与系统架构最匹配的安装程序,以及 Python 版本。 然后,您将使用安装向导以将其安装在系统上。 该网页对于任何操作系统都是通用的,因此您需要选择适当的平台,例如 Linux,OS X 或 Windows。 无论您使用的是 32 位还是 64 位版本,都需要选择并下载与系统架构最匹配的安装程序,以及 Python 版本。 然后,您将使用安装向导以将其安装在系统上。
......
...@@ -46,7 +46,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可 ...@@ -46,7 +46,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
![](img/08a48a18-eac9-4788-b8f1-5aae1022d307.png) ![](img/08a48a18-eac9-4788-b8f1-5aae1022d307.png)
查看此数据集,请注意,使用 Jupyter 笔记本电脑,它的显示方式更加可读。 实际上,这是一个`pandas` DataFrame 查看此数据集,请注意,使用 Jupyter 笔记本电脑,它的显示方式更加可读。 实际上,这是一个 pandas 数据帧
![](img/87068bb2-f619-4e2e-8b37-3ff5c460c85c.png) ![](img/87068bb2-f619-4e2e-8b37-3ff5c460c85c.png)
...@@ -66,7 +66,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可 ...@@ -66,7 +66,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
![](img/c65cf239-06de-4aaf-b417-7a5b18ee2682.png) ![](img/c65cf239-06de-4aaf-b417-7a5b18ee2682.png)
实际上,我们之前创建的 NumPy 对象可用于构造 Pandas DataFrame 实际上,我们之前创建的 NumPy 对象可用于构造 Pandas 数据帧
![](img/e88f7759-0724-4736-bac7-de4ab7fb85ce.png) ![](img/e88f7759-0724-4736-bac7-de4ab7fb85ce.png)
...@@ -78,9 +78,9 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可 ...@@ -78,9 +78,9 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
# 创建系列 # 创建系列
我们可以从类似数组的对象创建序列; 其中包括列表,元组和 NumPy `ndarray`对象。 我们还可以根据 Python 字典创建系列。 向系列添加索引的另一种方法是通过将唯一哈希值的索引或类似数组的对象传递给系列的 create 方法的 index 参数来创建索引。 我们可以从类似数组的对象创建序列; 其中包括列表,元组和 NumPy `ndarray`对象。 我们还可以根据 Python 字典创建系列。 向系列添加索引的另一种方法是通过将唯一哈希值的索引或类似数组的对象传递给系列的创建方法的`index`参数来创建索引。
我们也可以单独创建索引。 创建索引与创建序列很像,但是我们要求所有值都必须唯一。 每个系列都有一个索引。 如果我们不分配索引,则将从 0 开始的简单数字序列用作索引。 我们可以通过将字符串传递给该系列的 create 方法的 name 参数来为该系列命名。 我们这样做是为了,如果我们要使用该系列创建一个数据帧,我们可以自动为该系列分配列名或行名,这样我们就可以知道该系列描述的日期。 我们也可以单独创建索引。 创建索引与创建序列很像,但是我们要求所有值都必须唯一。 每个系列都有一个索引。 如果我们不分配索引,则将从 0 开始的简单数字序列用作索引。 我们可以通过将字符串传递给该系列的创建方法的`name`参数来为该系列命名。 我们这样做是为了,如果我们要使用该系列创建一个数据帧,我们可以自动为该系列分配列名或行名,这样我们就可以知道该系列描述的日期。
换句话说,该名称提供了有用的元数据,我建议在合理范围内尽可能设置此参数。 让我们看一个可行的例子。 请注意,我们直接将序列和数据帧对象导入名称空间: 换句话说,该名称提供了有用的元数据,我建议在合理范围内尽可能设置此参数。 让我们看一个可行的例子。 请注意,我们直接将序列和数据帧对象导入名称空间:
...@@ -112,7 +112,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可 ...@@ -112,7 +112,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
# 创建数据框 # 创建数据框
系列很有趣,主要是因为它们用于构建 pandas DataFrame。 我们可以将 pandas DataFrame 视为将系列组合在一起以形成表格对象,其中行和列为系列。 我们可以通过多种方式创建数据帧,我们将在此处进行演示。 我们可以给数据帧一个索引。 我们还可以通过设置 columns 参数来手动指定列名。 选择列名遵循与选择索引名相同的规则。 系列很有趣,主要是因为它们用于构建 pandas 数据帧。 我们可以将 pandas 数据帧视为将系列组合在一起以形成表格对象,其中行和列为系列。 我们可以通过多种方式创建数据帧,我们将在此处进行演示。 我们可以给数据帧一个索引。 我们还可以通过设置`columns`参数来手动指定列名。 选择列名遵循与选择索引名相同的规则。
让我们看看一些创建数据帧的方法。 我们要做的第一件事是创建数据帧,我们不会太在意它们的索引。 我们可以从 NumPy 数组创建一个数据帧: 让我们看看一些创建数据帧的方法。 我们要做的第一件事是创建数据帧,我们不会太在意它们的索引。 我们可以从 NumPy 数组创建一个数据帧:
...@@ -134,7 +134,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可 ...@@ -134,7 +134,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
![](img/aa282d53-2377-44e2-9fa3-e87784e108db.png) ![](img/aa282d53-2377-44e2-9fa3-e87784e108db.png)
现在,假设我们要创建一个数据帧并将一个 dict 传递给它,但是该 dict 不由长度相同的列表组成。 这将产生一个错误: 现在,假设我们要创建一个数据帧并将一个字典传递给它,但是该字典不由长度相同的列表组成。 这将产生一个错误:
![](img/34b2c99c-803f-4f06-8ec9-9e87c2ae3681.png) ![](img/34b2c99c-803f-4f06-8ec9-9e87c2ae3681.png)
...@@ -212,7 +212,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可 ...@@ -212,7 +212,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
![](img/e83b3582-4a47-40ce-a080-00ee3a1a74b4.png) ![](img/e83b3582-4a47-40ce-a080-00ee3a1a74b4.png)
唯一真正有趣的示例是当我们将冒号运算符与索引一起使用时; 请注意,所有 beta 和 delta 都包括在内,尤其是 delta。 这与我们通常与冒号运算符关联的行为不同。 这是一个有趣的示例: 唯一真正有趣的示例是当我们将冒号运算符与索引一起使用时; 请注意,所有起点和终点都包括在内,尤其是终点。 这与我们通常与冒号运算符关联的行为不同。 这是一个有趣的示例:
![](img/c6327805-7b1d-444f-a460-dbb14c237112.png) ![](img/c6327805-7b1d-444f-a460-dbb14c237112.png)
...@@ -252,7 +252,7 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引 ...@@ -252,7 +252,7 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引
如果要制作此数据的独立副本,则需要使用数据帧的`copy`方法。 系列也是如此。 如果要制作此数据的独立副本,则需要使用数据帧的`copy`方法。 系列也是如此。
现在来看一个例子。 H 是,我们创建一个 DataFrame `df`,它具有有趣的索引和列名: 现在来看一个例子。 我们创建一个数据帧`df`,它具有有趣的索引和列名:
![](img/1735a032-d079-4cfb-a7f1-af13d15f6d01.png) ![](img/1735a032-d079-4cfb-a7f1-af13d15f6d01.png)
...@@ -276,4 +276,4 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引 ...@@ -276,4 +276,4 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引
# 摘要 # 摘要
在本章中,我们介绍了 Pandas 并研究了它的作用。 我们探索了 Pandas 系列数据帧并创建了它们。 我们还研究了如何将数据添加到序列和数据帧中。 最后,我们介绍了保存数据帧。 在下一章中,我们将讨论算术,函数应用程序和函数映射。 在本章中,我们介绍了 Pandas 并研究了它的作用。 我们探索了 Pandas 系列数据帧并创建了它们。 我们还研究了如何将数据添加到序列和数据帧中。 最后,我们介绍了保存数据帧。 在下一章中,我们将讨论算术,函数应用和函数映射。
\ No newline at end of file \ No newline at end of file
# 算术,函数应用程序以及与 Pandas 的映射 # Pandas 的算术,函数应用以及映射
我们已经看到了使用 pandas series 和数据帧完成的一些基本任务。 让我们继续进行更有趣的应用程序。 在本章中,我们将重新讨论先前讨论的一些主题,这些主题涉及将算术函数应用于多元对象并处理 Pandas 中的缺失数据。 我们已经看到了使用 pandas 序列和数据帧完成的一些基本任务。 让我们继续进行更有趣的应用。 在本章中,我们将重新讨论先前讨论的一些主题,这些主题涉及将算术函数应用于多元对象并处理 Pandas 中的缺失数据。
# 算术 # 算术
...@@ -64,11 +64,11 @@ ...@@ -64,11 +64,11 @@
![](img/3fa02489-e851-43ae-8a6c-3f9d4440aca9.png) ![](img/3fa02489-e851-43ae-8a6c-3f9d4440aca9.png)
现在,让我们谈谈功能应用程序和映射。 这类似于我们之前定义的截断函数。 我正在使用`lambda`表达式创建一个临时函数,然后将该临时函数应用于`srs1`的每个元素,如下所示: 现在,让我们谈谈功能应用和映射。 这类似于我们之前定义的截断函数。 我正在使用`lambda`表达式创建一个临时函数,然后将该临时函数应用于`srs1`的每个元素,如下所示:
![](img/4ab5fcba-1a5b-4fc6-92fb-f0c3d827aa87.png) ![](img/4ab5fcba-1a5b-4fc6-92fb-f0c3d827aa87.png)
我们可以定义一个向量化函数来执行此操作,但是请注意,通过使用 apply,我们设法保留了序列结构。 让我们创建一个新系列`srs3`,如下所示: 我们可以定义一个向量化函数来执行此操作,但是请注意,通过使用`apply`,我们设法保留了序列结构。 让我们创建一个新系列`srs3`,如下所示:
![](img/6448ba68-fdf2-4c13-9aa9-74dd95d66292.png) ![](img/6448ba68-fdf2-4c13-9aa9-74dd95d66292.png)
...@@ -78,17 +78,17 @@ ...@@ -78,17 +78,17 @@
这也适用于功能,例如应用方式。 这也适用于功能,例如应用方式。
# DataFrames 的算术 # 数据帧的算术
DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处。 如您所料,两个数据帧或一个数据帧与一个缩放器之间的算术工作; 但是数据帧和系列之间的算术运算需要谨慎。 必须牢记的是,涉及数据帧的算法首先应用于数据帧的列,然后再应用于数据帧的行。 因此,数据帧中的列将与单个标量,具有与该列同名的索引的系列元素或其他涉及的数据帧中的列匹配。 如果有序列或数据帧的元素找不到匹配项,则会生成新列,对应于不匹配的元素或列,并填充 Nan。 数据帧之间的算术与序列或 NumPy 数组算术具有某些相似之处。 如您所料,两个数据帧或一个数据帧与一个缩放器之间的算术工作; 但是数据帧和系列之间的算术运算需要谨慎。 必须牢记的是,涉及数据帧的算法首先应用于数据帧的列,然后再应用于数据帧的行。 因此,数据帧中的列将与单个标量,具有与该列同名的索引的系列元素或其他涉及的数据帧中的列匹配。 如果有序列或数据帧的元素找不到匹配项,则会生成新列,对应于不匹配的元素或列,并填充 Nan。
# 使用数据帧进行向量化 # 使用数据帧进行向量化
向量化可以应用于数据帧。 给定一个数据帧时,许多 NumPy `ufuncs`(例如平方根或`sqrt`)将按预期工作; 实际上,当给定数据帧时,它们仍可能返回数据帧。 也就是说,这不能保证,尤其是在使用通过 vectorize 创建的自定义`ufunc`时。 在这种情况下,他们可能会返回`ndarray`。 虽然这些方法适用于具有通用数据类型的数据帧,但是不能保证它们将适用于所有数据帧。 向量化可以应用于数据帧。 给定一个数据帧时,许多 NumPy `ufuncs`(例如平方根或`sqrt`)将按预期工作; 实际上,当给定数据帧时,它们仍可能返回数据帧。 也就是说,这不能保证,尤其是在使用通过`vectorize`创建的自定义`ufunc`时。 在这种情况下,他们可能会返回`ndarray`。 虽然这些方法适用于具有通用数据类型的数据帧,但是不能保证它们将适用于所有数据帧。
# DataFrame 函数应用 # DataFrame 函数应用
毫不奇怪,数据帧提供了函数应用程序的方法。 您应注意两种方法:`apply``applymap``apply`带有一个函数,默认情况下,将该函数应用于与数据帧的每一列相对应的序列。 产生的内容取决于函数的功能。 我们可以更改 apply 的 axis 参数,以便将其应用于行(即跨列),而不是应用于列(即跨行)。`applymap`具有与应用不同的目的。 鉴于 apply 将评估每一列上提供的功能,因此应准备进行一系列研究,而`applymap`将分别评估数据帧的每个元素上的`pass`功能。 毫不奇怪,数据帧提供了函数应用的方法。 您应注意两种方法:`apply``applymap``apply`带有一个函数,默认情况下,将该函数应用于与数据帧的每一列相对应的序列。 产生的内容取决于函数的功能。 我们可以更改`apply``axis`参数,以便将其应用于行(即跨列),而不是应用于列(即跨行)。`applymap`具有与应用不同的目的。 鉴于`apply`将求值每一列上提供的功能,因此应准备进行一系列研究,而`applymap`将分别求值数据帧的每个元素上的`pass`功能。
我们可以使用`apply`函数来获取所需的数量,但是使用数据帧提供的现有方法通常更有用,并且也许更快。 我们可以使用`apply`函数来获取所需的数量,但是使用数据帧提供的现有方法通常更有用,并且也许更快。
...@@ -116,7 +116,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -116,7 +116,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
![](img/abd19d26-34d7-4089-813c-fc8eaf08dae6.png) ![](img/abd19d26-34d7-4089-813c-fc8eaf08dae6.png)
还记得自定义`ufunc` `trunk`吗? 它不会给我们一个数据帧,但是它将评估并返回类似于数据帧的内容,如下所示: 还记得自定义`ufunc` `trunk`吗? 它不会给我们一个数据帧,但是它将求值并返回类似于数据帧的内容,如下所示:
![](img/c76fa618-cc00-44e4-8fd6-1fb7808165e3.png) ![](img/c76fa618-cc00-44e4-8fd6-1fb7808165e3.png)
...@@ -134,7 +134,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -134,7 +134,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
![](img/28fbf5d6-c9e9-40e1-b003-9fc26681f2ce.png) ![](img/28fbf5d6-c9e9-40e1-b003-9fc26681f2ce.png)
现在,让我们看一下函数的应用程序。 在这里,我将定义一个函数,该函数计算所谓的[​​HTG1]几何平均值。 因此,我要做的第一件事是定义一个几何`mean`函数: 现在,让我们看一下函数的应用。 在这里,我将定义一个函数,该函数计算所谓的[​​HTG1]几何平均值。 因此,我要做的第一件事是定义一个几何`mean`函数:
![](img/6a665d98-3b5c-479b-a752-3b2f7c87e09c.png) ![](img/6a665d98-3b5c-479b-a752-3b2f7c87e09c.png)
...@@ -148,9 +148,9 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -148,9 +148,9 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
接下来,我们将讨论解决数据帧中丢失数据的方法。 接下来,我们将讨论解决数据帧中丢失数据的方法。
# 处理 Pandas DataFrame 中的丢失数据 # 处理 Pandas 数据帧中的丢失数据
在本节中,我们将研究如何处理 Pandas DataFrame 中的丢失数据。 我们有几种方法可以检测对系列和数据帧都有效的缺失数据。 我们可以使用 NumPy 的`isnan`函数; 我们还可以使用序列和数据帧提供的`isnull``notnull`方法进行检测。 NaN 检测对于处理丢失信息的自定义方法可能很有用。 在本节中,我们将研究如何处理 Pandas 数据帧中的丢失数据。 我们有几种方法可以检测对系列和数据帧都有效的缺失数据。 我们可以使用 NumPy 的`isnan`函数; 我们还可以使用序列和数据帧提供的`isnull``notnull`方法进行检测。 NaN 检测对于处理丢失信息的自定义方法可能很有用。
在本笔记本中,我们将研究管理丢失信息的方法。 首先,我们生成一个包含缺失数据的数据帧,如以下屏幕截图所示: 在本笔记本中,我们将研究管理丢失信息的方法。 首先,我们生成一个包含缺失数据的数据帧,如以下屏幕截图所示:
...@@ -162,7 +162,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -162,7 +162,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
![](img/41acc8cd-2f05-4868-82ef-7f69e42a6562.png) ![](img/41acc8cd-2f05-4868-82ef-7f69e42a6562.png)
让我们看一些检测丢失数据的方法。 这些方法将产生相同的结果或完全矛盾的结果。 例如,我们可以使用 NumPy 的`isnan`函数返回一个数据帧,如果数据为 NaN 或丢失,则返回 true,否则返回 false 让我们看一些检测丢失数据的方法。 这些方法将产生相同的结果或完全矛盾的结果。 例如,我们可以使用 NumPy 的`isnan`函数返回一个数据帧,如果数据为 NaN 或丢失,则返回`true`,否则返回`false`
![](img/637b576a-8f40-4a7f-86e1-17f3e4bd65a5.png) ![](img/637b576a-8f40-4a7f-86e1-17f3e4bd65a5.png)
...@@ -170,7 +170,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -170,7 +170,7 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
![](img/6f31c997-41ea-4863-bbea-39fc8e9fb8a3.png) ![](img/6f31c997-41ea-4863-bbea-39fc8e9fb8a3.png)
`notnull`功能基本上与`isnull`功能完全相反; 缺少数据时返回 false,不丢失数据时返回 true,如下所示: `notnull`功能基本上与`isnull`功能完全相反; 缺少数据时返回`false`,不丢失数据时返回`true`,如下所示:
![](img/2696fb61-724d-4539-a2ff-062ff73ea35f.png) ![](img/2696fb61-724d-4539-a2ff-062ff73ea35f.png)
...@@ -178,9 +178,9 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -178,9 +178,9 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
系列和数据帧的`dropna`可用于创建对象的副本,其中删除了丢失的信息行。 默认情况下,它将删除缺少任何数据的行,并且与系列一起使用时,它将使用 NaN 消除元素。 如果要适当完成此操作,请将`inplace`参数设置为`true` 系列和数据帧的`dropna`可用于创建对象的副本,其中删除了丢失的信息行。 默认情况下,它将删除缺少任何数据的行,并且与系列一起使用时,它将使用 NaN 消除元素。 如果要适当完成此操作,请将`inplace`参数设置为`true`
如果我们只想删除仅包含缺少信息的行,因此不删除任何使用信息,则可以将 how 参数设置为全部。 默认情况下,此方法适用于行,但如果要更改其适用于列,则可以将 access 参数设置为 1。 如果我们只想删除仅包含缺少信息的行,因此不删除任何使用信息,则可以将`how`参数设置为全部。 默认情况下,此方法适用于行,但如果要更改其适用于列,则可以将`access`参数设置为 1。
这是我们刚才讨论的示例。 让我们使用此 DataFrame `df`,并删除存在缺失数据的所有行: 这是我们刚才讨论的示例。 让我们使用此数据帧`df`,并删除存在缺失数据的所有行:
![](img/197cde54-08db-4810-a7fc-409118152df4.png) ![](img/197cde54-08db-4810-a7fc-409118152df4.png)
...@@ -248,4 +248,4 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处 ...@@ -248,4 +248,4 @@ DataFrame 之间的算术与序列或 NumPy 数组算术具有某些相似之处
# 摘要 # 摘要
在本章中,我们介绍了 Pandas DataFrames,向量化和数据帧函数应用程序的算术运算。 我们还学习了如何通过删除或填写缺失的信息来处理 pandas DataFrame 中的缺失数据。 在下一章中,我们将研究数据分析项目中的常见任务的排序,排序,和。 在本章中,我们介绍了 Pandas 数据帧,向量化和数据帧函数应用的算术运算。 我们还学习了如何通过删除或填写缺失的信息来处理 pandas 数据帧中的缺失数据。 在下一章中,我们将研究数据分析项目中的常见任务,排序和绘图。
\ No newline at end of file \ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# 索引排序 # 索引排序
在谈论排序时,我们需要考虑我们到底要排序什么。 有行,列,它们的索引以及它们包含的数据。 让我们首先看一下索引排序。 我们可以使用`sort_index`方法重新排列数据帧的行,以使行索引按顺序排列。 我们还可以通过将`sort_index`的访问参数设置为`1`来对列进行排序。 默认情况下,排序是按升序进行的; 后几行的值比前几行大,但是我们可以通过将`sort_index`值的升值设置为 false 来更改此行为。 这按降序排序。 默认情况下,此操作未就位。 为此,您需要将`sort_index`的就地参数设置为 true 在谈论排序时,我们需要考虑我们到底要排序什么。 有行,列,它们的索引以及它们包含的数据。 让我们首先看一下索引排序。 我们可以使用`sort_index`方法重新排列数据帧的行,以使行索引按顺序排列。 我们还可以通过将`sort_index`的访问参数设置为`1`来对列进行排序。 默认情况下,排序是按升序进行的; 后几行的值比前几行大,但是我们可以通过将`sort_index`值的升值设置为`false`来更改此行为。 这按降序排序。 默认情况下,此操作未就位。 为此,您需要将`sort_index`的就地参数设置为`true`
虽然我强调了对数据帧进行排序,但是对系列进行排序实际上是相同的。 让我们来看一个例子。 加载 NumPy 和 pandas 之后,我们创建一个数据帧并带有要排序的值,如以下屏幕快照所示: 虽然我强调了对数据帧进行排序,但是对系列进行排序实际上是相同的。 让我们来看一个例子。 加载 NumPy 和 pandas 之后,我们创建一个数据帧并带有要排序的值,如以下屏幕快照所示:
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
![](img/4457a7af-f3ae-44d5-9d2e-7b4113ea14b1.png) ![](img/4457a7af-f3ae-44d5-9d2e-7b4113ea14b1.png)
排名告诉我们如果元素按顺序排列将如何显示。 我们可以使用 rank 方法来查找系列或数据帧中元素的排名。 默认情况下,排名是按升序进行的; 将升序参数设置为 false 可更改此设置。 除非发生联系,否则排名很简单。 在这种情况下,您将需要一种确定排名的方法。 有四种处理联系的方法:平均值,最小值,最大值和第一种。 平均值给出平均等级,最小值赋予尽可能低的等级,最大值赋予尽可能最高的等级,然后首先使用序列中的顺序打破平局,以使它们永远不会发生。 当在数据帧上调用时,每一列都将单独排名,结果将是一个包含等级的数据帧。 现在,让我们看看这个排名。 我们要求`df`中条目的排名,这实际上是结果: 排名告诉我们如果元素按顺序排列将如何显示。 我们可以使用`rank` 方法来查找系列或数据帧中元素的排名。 默认情况下,排名是按升序进行的; 将升序参数设置为`false`可更改此设置。 除非发生联系,否则排名很简单。 在这种情况下,您将需要一种确定排名的方法。 有四种处理联系的方法:平均值,最小值,最大值和第一种。 平均值给出平均等级,最小值赋予尽可能低的等级,最大值赋予尽可能最高的等级,然后首先使用序列中的顺序打破平局,以使它们永远不会发生。 当在数据帧上调用时,每一列都将单独排名,结果将是一个包含等级的数据帧。 现在,让我们看看这个排名。 我们要求`df`中条目的排名,这实际上是结果:
![](img/1468e55d-f480-4e84-94d6-f9459e425cf1.png) ![](img/1468e55d-f480-4e84-94d6-f9459e425cf1.png)
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
![](img/a2f577d5-3e7b-4b0c-a69f-a920b7b281d5.png) ![](img/a2f577d5-3e7b-4b0c-a69f-a920b7b281d5.png)
然后我们将其进一步缩小到`b``alpha`; 结果如下。 这将是该系列的 Alpha 片段(在前面的屏幕截图中): 然后我们将其进一步缩小到`b``alpha`; 结果如下。 这将是该系列的`alpha`片段(在前面的屏幕截图中):
![](img/94bc6803-df54-4698-b805-d69926fa1629.png) ![](img/94bc6803-df54-4698-b805-d69926fa1629.png)
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
![](img/4b156f08-6720-43af-a387-e617b557935d.png) ![](img/4b156f08-6720-43af-a387-e617b557935d.png)
然后我们通过缩小`b``alpha`进行重复,但是请注意,我们现在必须使用元组以确保 alpha 不会被解释为我们感兴趣的列,如下所示: 然后我们通过缩小`b``alpha`进行重复,但是请注意,我们现在必须使用元组以确保`alpha`不会被解释为我们感兴趣的列,如下所示:
![](img/f74b545c-a6ea-4a41-9c60-bc62f6398d08.png) ![](img/f74b545c-a6ea-4a41-9c60-bc62f6398d08.png)
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
# 用 Pandas 绘图 # 用 Pandas 绘图
在本节中,我们将讨论 pandas series 和数据帧提供的绘图方法。 您将看到如何轻松快速地创建许多有用的图。 Pandas 尚未提出完全属于自己的绘图功能。 相反,使用 pandas 方法从 pandas 对象创建的图只是对称为 **Matplotlib** 的绘图库进行更复杂调用的包装。 这是科学 Python 社区中众所周知的库,它是最早的绘图系统之一,也许是最常用的绘图系统,尽管其他绘图系统正在寻求替代它。 在本节中,我们将讨论 pandas 序列和数据帧提供的绘图方法。 您将看到如何轻松快速地创建许多有用的图。 Pandas 尚未提出完全属于自己的绘图功能。 相反,使用 pandas 方法从 pandas 对象创建的图只是对称为 **Matplotlib** 的绘图库进行更复杂调用的包装。 这是科学 Python 社区中众所周知的库,它是最早的绘图系统之一,也许是最常用的绘图系统,尽管其他绘图系统正在寻求替代它。
它最初是由 MATLAB 随附的绘图系统启发的,尽管现在它是它自己的野兽,但不一定是最容易使用的。 Matplotlib 具有许多功能,在本课程中,我们将只涉及其绘制的表面。 在本节中,我们将讨论在特定实例之外使用 Python 进行可视化的程度,即使可视化是从初始探索到呈现结果的数据分析的关键部分。 我建议寻找其他资源以了解有关可视化的更多信息。 例如,Packt 有专门针对该主题的视频课程。 它最初是由 MATLAB 随附的绘图系统启发的,尽管现在它是它自己的野兽,但不一定是最容易使用的。 Matplotlib 具有许多功能,在本课程中,我们将只涉及其绘制的表面。 在本节中,我们将讨论在特定实例之外使用 Python 进行可视化的程度,即使可视化是从初始探索到呈现结果的数据分析的关键部分。 我建议寻找其他资源以了解有关可视化的更多信息。 例如,Packt 有专门针对该主题的视频课程。
...@@ -122,11 +122,11 @@ ...@@ -122,11 +122,11 @@
# 绘图方法 # 绘图方法
关键的 pandas 对象,系列和数据帧提供了一种绘图方法,简称为 plot。 它可以轻松地创建图表,例如折线图,散点图,条形图或所谓的核密度估计图(用于了解数据的形状) , 等等。 可以创建许多图。 我们可以通过将`plot`中的 kind 参数设置为字符串来控制所需的绘图,以指示所需的绘图。 通常,这会产生一些带有通常选择的默认参数的图。 通过在 plot 方法中指定其他参数,我们可以更好地控制最终输出,然后将这些参数传递给 Matplotlib。 因此,我们可以控制诸如标签,绘图样式,*x* 限制,*y* 限制,不透明度和其他详细信息之类的问题。 关键的 pandas 对象,系列和数据帧提供了一种绘图方法,简称为`plot`。 它可以轻松地创建图表,例如折线图,散点图,条形图或所谓的核密度估计图(用于了解数据的形状) , 等等。 可以创建许多图。 我们可以通过将`plot`中的`kind`参数设置为字符串来控制所需的绘图,以指示所需的绘图。 通常,这会产生一些带有通常选择的默认参数的图。 通过在`plot`方法中指定其他参数,我们可以更好地控制最终输出,然后将这些参数传递给 Matplotlib。 因此,我们可以控制诸如标签,绘图样式,*x* 限制,*y* 限制,不透明度和其他详细信息之类的问题。
存在用于创建不同图的其他方法。 例如,系列有一个称为 hist 的方法来创建直方图。 存在用于创建不同图的其他方法。 例如,系列有一个称为`hist`的方法来创建直方图。
在本笔记本中,我将演示一些图形。 我要做的第一件事是在`pandas`中加载,并且我将使用`pylab`魔术(带有参数 inline 的 Matplotlib 魔术),以便我们可以在创建它们的那一刻看到绘图: 在本笔记本中,我将演示一些图形。 我要做的第一件事是在`pandas`中加载,并且我将使用`pylab`魔术(带有参数`inline`的 Matplotlib 魔术),以便我们可以在创建它们的那一刻看到绘图:
![](img/c472ddcb-ba3b-40b5-8bba-a9997d2ab6ed.png) ![](img/c472ddcb-ba3b-40b5-8bba-a9997d2ab6ed.png)
...@@ -134,13 +134,13 @@ ...@@ -134,13 +134,13 @@
![](img/d7ae015a-e31b-4ed2-84de-43c2c61c3af8.png) ![](img/d7ae015a-e31b-4ed2-84de-43c2c61c3af8.png)
我们使用 head 方法仅查看前五行。 这是了解数据集结构的好方法。 那么,这些地块是什么样的? 好吧,让我们创建一个可视化它们的折线图,如下所示: 我们使用`head`方法仅查看前五行。 这是了解数据集结构的好方法。 那么,这些地块是什么样的? 好吧,让我们创建一个可视化它们的折线图,如下所示:
![](img/77895404-17e4-46e0-ad77-5aeb36b9051e.png) ![](img/77895404-17e4-46e0-ad77-5aeb36b9051e.png)
![](img/c4314631-cb23-4d2c-bf5a-18c81da12168.png) ![](img/c4314631-cb23-4d2c-bf5a-18c81da12168.png)
这些只是上下随机运动。 请注意,plot 方法会自动生成一个键和一个图例,并为不同的线分配颜色,这些线与我们要绘制的数据帧的列相对应。 让我们看一下该系列的图,如下所示: 这些只是上下随机运动。 请注意,`plot`方法会自动生成一个键和一个图例,并为不同的线分配颜色,这些线与我们要绘制的数据帧的列相对应。 让我们看一下该系列的图,如下所示:
![](img/a9f2ddad-23fa-4e90-a86d-bda81a76c508.png) ![](img/a9f2ddad-23fa-4e90-a86d-bda81a76c508.png)
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
![](img/7b6b1466-4a6a-4675-b673-6cc68cb69643.png) ![](img/7b6b1466-4a6a-4675-b673-6cc68cb69643.png)
您可以创建更多图。 我诚挚地邀请您探索绘图方法,不仅是 Pandas 的绘图方法(我提供了许多示例的文档链接),而且还探讨了 Matplotlib 您可以创建更多图。 我诚挚地邀请您探索绘图方法,不仅是 Pandas 的绘图方法(我提供了许多示例的文档链接),而且还探讨了 Matplotlib。
# 摘要 # 摘要
......
+ [NumPy 和 Pandas 数据分析实用指南](README.md) + [NumPy 和 Pandas 数据分析实用指南](README.md)
+ [前言](0.md) + [前言](0.md)
+ [设置 Python 数据分析环境](1.md) + [设置 Python 数据分析环境](1.md)
+ [潜入 NumPY](2.md) + [潜入 NumPy](2.md)
+ [NumPy 数组上的运算](3.md) + [NumPy 数组上的运算](3.md)
+ [Pandas 很有趣! 什么是 Pandas?](4.md) + [Pandas 很有趣! 什么是 Pandas?](4.md)
+ [算术,函数应用程序以及与 Pandas 的映射](5.md) + [Pandas 的算术,函数应用以及映射](5.md)
+ [管理,建立索引和绘图](6.md) + [管理,建立索引和绘图](6.md)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册