提交 a3fb4af9 编写于 作者: W wizardforcel

2020-07-14 21:31:09

上级 ac6f483b
......@@ -6,11 +6,11 @@ Python 是一种多范式编程语言,已成为数据科学家进行数据分
到本书结尾,您将学习对数据进行索引和分组以进行复杂的数据分析和处理。
# 这本书是给谁的
## 这本书是给谁的
如果您是 Python 开发人员,并且想迈出第一步进入数据分析领域,那么这就是您一直在等待的书!
# 充分利用这本书
## 充分利用这本书
Python 3.4.x 或更高版本。 在 Debian 及其衍生产品(Ubuntu)上:python,python-dev 或 python3-dev。 在 Windows 上: [www.python.org](http://www.python.org) 上的官方 python 安装程序就足够了:
......@@ -18,7 +18,7 @@ Python 3.4.x 或更高版本。 在 Debian 及其衍生产品(Ubuntu)上:p
* Pandas
# 使用约定
## 使用约定
本书中使用了许多文本约定。
......
# 置 Python 数据分析环境
# 置 Python 数据分析环境
在本章中,我们将介绍以下主题:
......@@ -10,7 +10,7 @@
在本章中,我们将讨论如何安装和管理 Anaconda。 Anaconda 是一个软件包,我们将在本书的以下各章中使用。
# 什么是 Anaconda?
## 什么是 Anaconda?
在本节中,我们将讨论什么是 Anaconda 以及为什么使用它。 我们将提供一个链接,以显示从其赞助商 Continuum Analytics 的网站下载 Anaconda 的位置,并讨论如何安装 Anaconda。 Anaconda 是 Python 和 R 编程语言的开源发行版。
......@@ -20,7 +20,7 @@ Anaconda 的安装包括现成的数据分析所需的大部分内容。 Conda
为什么要使用 Anaconda? Anaconda 专门为数据分析打包了 Python。 Anaconda 安装中包含了您项目中最重要的软件包。 除了 Anaconda 提供的一些性能提升,和 Continuum Analytics 对该程序包的企业支持之外,对于它的流行也不应感到惊讶。
# 安装 Anaconda
## 安装 Anaconda
您可以从 Continuum Analytics 网站免费下载 Anaconda。 [下载主页面在这里](https://www.anaconda.com/download/); 否则,很容易找到。 确保选择适合您系统的安装程序。 显然,选择适合您的操作系统的安装程序,但也要注意 Anaconda 具有 32 位和 64 位版本。 64 位版本为 64 位系统提供最佳性能。
......@@ -38,7 +38,7 @@ Anaconda website
Linux 安装必须通过命令行完成,但是对于那些熟悉 Linux 安装的人来说,它应该不会太复杂。 最终,这相当于运行 Bash 脚本。 在本书中,我们将使用 Windows。
# 探索 Jupyter 笔记本
## 探索 Jupyter 笔记本
在本节中,我们将探索 Jupyter 笔记本,这是我们将使用 Python 进行数据分析的主要工具。 我们将看到什么是 Jupyter 笔记本,还将讨论 Markdown,这是我们在 Jupyter 笔记本中用于创建格式化文本的工具。 在 Jupyter 笔记本中,有两种类型的块。 有一些可执行的 Python 代码块,然后是带格式的,人类可读的文本块。
......@@ -120,7 +120,7 @@ Anaconda 随附 Jupyter 笔记本。 Jupyter 笔记本允许纯文本与代码
现在,我们已经完成了此笔记本的工作,让我们为其命名。 我们简单地称它为`My Notebook`。 通过单击编辑器窗格顶部的笔记本名称来完成此操作。 最后,您可以保存,并且保存后可以关闭和停止笔记本电脑。 因此,这将关闭笔记本并停止笔记本的内核。 那是离开笔记本电脑的干净方法。 现在注意,在我们的树中,我们可以看到保存笔记本的目录,并且可以看到该目录中存在笔记本。 它是`ipynb`文件。
# 探索 Jupyter 的替代品
## 探索 Jupyter 的替代品
现在,我们将考虑替代 Jupyter 笔记本。 我们将看:
......@@ -207,7 +207,7 @@ plt.scatter(iris.data[:, 0], iris.data[:, 1], c = iris_clusters.labels_)
```
# Spyder
## Spyder
Spyder 是与 Jupyter 笔记本或 Jupyter QT 控制台不同的 IDE。 它集成了 NumPy,SciPy,Matplotlib 和 IPython。 它可以通过插件扩展,并且包含在 Anaconda 中。
......@@ -247,13 +247,13 @@ n
到此结束我们对 Spyder 的讨论。
# Rodeo
## Rodeo
Rodeo 是 Yhat 开发的 Python IDE,专门用于数据分析应用。 它旨在模拟在 R 用户中很流行的 RStudio IDE,并且可以从 Rodeo 的网站上下载。 基本的 Python 解释器的唯一优点是每个 Python 安装程序都包含它,如下所示:
![](img/e63f586b-c60a-49fe-9a52-dee69d209d6c.png)
# ptpython
## ptpython
Jonathan Slenders 设计的`ptpython`可能是鲜为人知的基于控制台的 Python REPL。 它仅存在于控制台中,并且是他的独立项目。 您可以在 GitHub 上找到它。 它具有轻量级功能,但还包括语法突出显示,自动完成,甚至包括 IPython。 可以使用以下命令进行安装:
......@@ -264,20 +264,20 @@ pip install ptpython
到此,我们结束了有关 Jupyter 笔记本替代品的讨论。
# 使用 Conda 进行包裹管理
## 使用 Conda 进行包管理
现在,我们将与 Conda 讨论软件包管理。 在本节中,我们将研究以下主题:
* 什么是康达
* 什么是 Conda
* 管理 Conda 环境
* 使用 Conda 管理 Python
* 使用 Conda 管理软件包
# 什么是康达
## 什么是 Conda
那么什么是康达? 康达(Conda)是 Anaconda 的包裹经理。 Conda 允许我们创建和管理多个环境,从而允许存在多个版本的 Python,R 及其相关软件包。 如果您需要使用不同版本的 Python 及其软件包针对不同的系统进行开发,这将非常有用。 Conda 允许您管理 Python 和 R 版本,并且还简化了软件包的安装和管理。
那么什么是 Conda? Conda(Conda)是 Anaconda 的包经理。 Conda 允许我们创建和管理多个环境,从而允许存在多个版本的 Python,R 及其相关软件包。 如果您需要使用不同版本的 Python 及其软件包针对不同的系统进行开发,这将非常有用。 Conda 允许您管理 Python 和 R 版本,并且还简化了软件包的安装和管理。
# 康达环境管理
## Conda 环境管理
Conda 环境允许开发人员在其程序包中使用和管理不同版本的 Python。 这对于在遗留系统上进行测试和开发很有用。 可以保存,克隆和导出环境,以便其他人可以复制结果。
......@@ -323,11 +323,11 @@ conda remove --name env_name -all
创建了这样的文件后,或者如果您从其他用户那里收到了此文件,则创建新环境非常容易。
# 管理 Python
## 管理 Python
如前所述,Anaconda 允许您管理多个版本的 Python。 可以搜索并查看哪些版本的 Python 可用于安装。 您可以验证环境中使用的是哪个版本的 Python,甚至可以为 Python 2.7 创建环境。 您还可以更新当前环境中的 Python 版本。
# 包装管理
## 包管理
假设我们对安装软件包`selenium`感兴趣,该软件包用于 Web 抓取和 Web 测试。 我们可以列出当前安装的软件包,并且可以给出安装新软件包的命令。
......@@ -354,7 +354,7 @@ conda remove selenium
```
#置数据库
## 配置数据库
现在,我们将开始讨论设置数据库供您使用。 在本节中,我们将研究以下主题:
......@@ -364,7 +364,7 @@ conda remove selenium
为了使 MySQL 和 Python 一起使用,MySQL 连接器是必需的。 存在许多 SQL 数据库实现,尽管 MySQL 可能不是最简单的数据库管理系统,但它功能齐全,具有工业实力,在现实世界中很常见,而且它是免费和开源的,这意味着它是一个很好的学习工具。 您可以从 [MySQL 的网站](https://dev.mysql.com/downloads/)上获取 MySQL 社区版,它是免费和开源的版本。
# 安装 MySQL
## 安装 MySQL
对于 Linux 系统,如果可能,我建议您使用可用的任何软件包管理系统安装 MySQL。 如果您使用的是基于 Red-Hat 的发行版,则可以使用 YUM;如果您使用的是基于 Debian 的发行版,则可以使用 APT;或者,请使用 SUSE 的存储库系统。 如果您没有程序包管理系统,则可能需要从源代码安装 MySQL。
......@@ -378,7 +378,7 @@ Windows 用户可以直接从其网站安装 MySQL。 您还应该注意,MySQL
通常有可用的发行版。 这些应该是稳定的。 开发版本旁边是“常规版本”选项卡。 我建议您不要下载这些,除非您知道自己在做什么。
# MySQL 连接器
## MySQL 连接器
MySQL 的功能类似于系统上的驱动程序,其他应用则与 MySQL 交互,就好像它是驱动程序一样。 因此,您将需要下载一个 MySQL 连接器,以便能够将 MySQL 与 Python 结合使用。 这将允许 Python 与 MySQL 通信。 您最终要做的是将其加载到程序包中,然后开始与 MySQL 的连接。 可以从 [MySQL 的网站](https://dev.mysql.com/downloads/connector/)下载 Python 连接器。
......@@ -392,7 +392,7 @@ MySQL 的功能类似于系统上的驱动程序,其他应用则与 MySQL 交
因此,数据库管理是一个主要主题。 涉及数据库管理的所有内容将使我们远远超出本书的范围。 我们不会谈论好的数据库是如何设计的。 我建议您转到另一个资源,也许是另一个解释这些主题的 Packt 产品,因为它们很重要。 关于 SQL,我们只会告诉您基本级别使用 SQL 所需的命令。 也没有关于权限的讨论,因此我们将假设您的数据库对使用它的任何用户都具有完全权限,并且一次只有一个用户。
# 建立资料
## 建立数据
在 MySQL 命令行中安装 MySQL 之后,我们可以使用以下命令创建数据库,其后为数据库的名称:
......@@ -456,6 +456,6 @@ drop database mydb
这将删除数据库。
# 摘要
## 总结
在本章中,向我们介绍了 Anaconda,了解了为什么它是一个有用的起点,然后下载并安装了它。 我们探索了 Jupyter 的一些替代方法,介绍了如何管理 Anaconda 软件包,还学习了如何设置 MySQL 数据库。 不过,在本书的其余部分中,我们都假定已经安装了 Anaconda。 在下一章中,我们将讨论如何使用 NumPy,它是数据分析中的有用软件包。 没有这个包,使用 Python 进行数据分析几乎是不可能的。
\ No newline at end of file
# 潜入 NumPy
# 探索 NumPy
到目前为止,您应该已经安装了使用 Python 进行数据分析所需的一切。 现在让我们开始讨论 NumPy,这是用于管理数据和执行计算的重要软件包。 没有 NumPy,就不会使用 Python 进行任何数据分析,因此了解 NumPy 至关重要。 本章的主要目标是学习使用 NumPy 中提供的工具。
......@@ -12,7 +12,7 @@
我们从讨论数据类型开始,这在处理 NumPy 数组时在概念上很重要。 在本章中,我们将讨论由`dtype`对象控制的 NumPy 数据类型,这是 NumPy 存储和管理数据的方式。 我们还将简要介绍称为`ndarray`的 NumPy 数组,并讨论它们的作用。
# NumPy 数组
## NumPy 数组
现在让我们讨论称为`ndarray`的 NumPy 数组。 这些不是您在 C 或 C++ 中可能遇到的数组。 更好的模拟是 MATLAB 或 R 中的矩阵。 也就是说,它们的行为类似于数学对象,类似于数学向量,矩阵或张量。 尽管它们可以存储诸如字符串之类的非数学信息,但它们的存在主要是为了管理和简化对数字数据的操作。`ndarray`在创建时被分配了特定的数据类型或`dtype`,并且数组中所有当前和将来的数据必须属于该`dtype`。 它们还具有多个维度,称为**轴**
......@@ -48,7 +48,7 @@
我可以手动指定`dtype`并说允许使用 16 个字符; 在这种情况下,`Waldo`可以正常工作。
# 特殊数值
## 特殊数值
除了`dtype`对象之外,NumPy 还引入了特殊的数值:`nan``inf`。 这些可以在数学计算中出现。 **不是数字**`NaN`)。 它表明应为数字的值实际上不是数学定义的。 例如,`0/0`产生`nan`。 有时`nan`也用于表示缺少的信息; 例如,Pandas 就用这个。`inf`表示任意大的数量,因此在实践中,它表示比计算机可以想象的任何数量大的数量。 还定义了`-inf`,它的意思是任意小。 如果数字运算爆炸,即迅速增长而没有边界,则可能会发生这种情况。
......@@ -94,7 +94,7 @@
但是,如果我们使用函数`nansum`,则`nan`将被忽略,我们将获得合理的值 4。
# 创建 NumPy 数组
## 创建 NumPy 数组
现在,我们已经讨论了 NumPy 数据类型,并简要介绍了 NumPy 数组,下面让我们讨论如何创建 NumPy 数组。 在本节中,我们将使用各种函数创建 NumPy 数组。 有一些函数可以创建所谓的空`ndarray`; 用于创建`ndarray`的函数,其中填充了 0、1 或随机数; 以及使用数据创建`ndarray`的功能。 我们将讨论所有这些,以及从磁盘保存和加载 NumPy 数组。 有几种创建数组的方法。 一种方法是使用数组函数,在此我们提供一个可迭代的对象或一个可迭代的对象列表,从中将生成一个数组。
......@@ -106,7 +106,7 @@
认为可以通过将`arr1`分配给新变量来复制它是错误的。 相反,您实际上得到的是指向相同数据的新指针。 如果您想要一个具有完全独立于其父代的相同数据的新数组,则将需要使用`copy`方法,我们将看到。
# 创建 ndarray
## 创建`ndarray`
在下面的笔记本中,我们创建一个`ndarray`。 我们要做的第一件事是创建一个 1 的向量。 注意正在传递的元组; 它仅包含一个数字`5`。 因此,它将是具有五个元素的一维`ndarray`
......@@ -224,7 +224,7 @@
![](img/f28be513-9207-4b9c-bb2f-79cf5e1e108a.png)
# 摘要
## 总结
在本章中,我们首先介绍 NumPy 数据类型。 然后我们迅速讨论了称为`ndarray`对象,的 NumPy 数组,它们是 NumPy 感兴趣的主要对象。 我们讨论了如何根据程序员的输入,其他 Python 对象,文件甚至函数创建这些数组。 我们继续讨论了如何从基本算术到成熟的线性代数对`ndarray`对象进行数学运算。
......
......@@ -2,7 +2,7 @@
现在,我们知道如何创建 NumPy 数组,我们可以讨论切片 NumPy 数组的重要主题,以便访问和操作数组数据的子集。 在本章中,我们将介绍每个 NumPy 用户应了解的有关数组切片,算术,带有数组的线性代数以及采用数组方法和函数的知识。
# 明确选择元素
## 显式选择元素
如果您知道如何选择 Python 列表的子集,那么您将了解有关`ndarray`切片的大部分知识。 与索引对象的元素相对应的被索引数组元素在新数组中返回。 索引编制的最重要方面是要记住存在多个维度,并且索引编制方法应能够处理这些其他维度。
......@@ -12,7 +12,7 @@
用逗号分隔不同维度的索引对象; 第一个逗号之前的对象显示了如何索引第一维。 在第一个逗号之后是第二个维度的索引,在第二个逗号之后是第三个维度的索引,依此类推。
# 用冒号切片数组
## 用冒号切片数组
使用冒号索引`ndarray`对象的工作类似于使用冒号索引列表。 只要记住,现在有多个维度。 请记住,当冒号之前或之后的点留为空白时,Python 会将索引视为扩展到维的开始或结束。 可以指定第二个冒号,以指示 Python 跳过每隔一行或反转行的顺序,具体取决于第二个冒号下的数目。
......@@ -86,7 +86,7 @@
尽管事实上其中一个维度的长度为 1。
# 高级索引
## 高级索引
现在让我们讨论更高级的索引技术。 我们可以使用其他`ndarray``ndarray`对象建立索引。 我们可以使用包含与我们希望选择的`ndarray`的索引对应的整数的`ndarray`对象或布尔值的`ndarray`对象来切片`ndarray`对象,其中值`true`表示切片中应包含一个单元格。
......@@ -130,7 +130,7 @@
那是原始数组的元素 2、0、2。
# 扩展数组
## 扩展数组
连接功能允许使用屏幕上显示的语法沿公共轴将数组绑定在一起。 该方法要求数组沿未用于绑定的轴具有相似的形状。 结果就是全新的`ndarray`,这是将数组粘合在一起的产物。 为此,还存在其他类似功能,例如堆栈。 我们不会涵盖所有内容。
......@@ -148,11 +148,11 @@
我们将继续对数组进行数学运算。
# 带数组的算术和线性代数
## 带数组的算术和线性代数
现在,我们已经了解了如何使用 NumPy 数组创建和访问信息,让我们介绍一下可以对数组执行的一些数值运算。 在本节中,我们将讨论使用 NumPy 数组的算法。 我们还将讨论将 NumPy 数组用于线性代数。
# 具有两个相等形状数组的算术
## 两个形状相等的数组的算术
NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有两个形状相同的矩阵,则通过匹配两个矩阵中的相应分量并将它们相加来完成诸如加法之类的操作。 对于任何算术运算都是如此,无论是加法,减法,乘法,除法,幂,甚至是逻辑运算符。
......@@ -184,7 +184,7 @@ NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有
注意,此计算最终产生了`inf``nan`
# 广播
## 广播
到目前为止,我们已经处理了两个形状相同的数组。 实际上,这不是必需的。 尽管我们不一定要添加两个任意形状的数组,但是在某些情况下,我们可以合理地对不同形状的数组执行算术运算。 从某种意义上说,较小数组中的信息被视为属于相同形状但具有重复值的数组。 让我们看看实际的广播行为。
......@@ -210,7 +210,7 @@ NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有
![](img/e73ffc17-b8e1-4085-af9b-4e47e4d7e2c6.png)
# 线性代数
## 线性代数
请注意,NumPy 是为支持线性代数而构建的。 一维 NumPy 数组可以对应于线性代数向量; 矩阵的二维数组; 和 3D,4D 或所有`ndarray`到张量。 因此,在适当的时候,NumPy 支持线性代数运算,例如数组的矩阵乘积,转置,矩阵求逆等。`linalg`模块支持大多数 NumPy 线性代数功能。 以下是常用的 NumPy 线性代数函数的列表:
......@@ -280,11 +280,11 @@ NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有
![](img/5d2aa92e-60d1-4e7f-89aa-f1a01dd3bb56.png)
# 使用数组方法和函数
## 使用数组方法和函数
现在,我们将讨论 NumPy 数组方法和函数的使用。 在本节中,我们将研究常见的`ndarray`函数和方法。 这些功能使您可以使用简洁,直观的语法执行常规任务,而不仅仅是 Python 代码的概念。
# 数组方法
## 数组方法
NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如查找数据集的均值或多个数据集的多个均值。 我们可以对数组的行和列进行排序,找到数学和统计量,等等。 有很多功能可以完成很多事情! 我不会全部列出。 在下面,我们看到了常见管理任务所需的功能,例如将数组解释为列表或对数组内容进行排序:
......@@ -337,7 +337,7 @@ NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如
![](img/fefb42e0-e214-456a-b32a-74909478cd87.png)
# 用`ufuncs`进行向量化
## `ufuncs`的向量化
`ufunc`是专门用于数组的 NumPy 函数; 特别地,它们支持向量化。 向量化函数按组件方式应用于数组的元素。 这些通常是高度优化的功能,可以在较快的语言(例如 C)的后台运行。
......@@ -357,7 +357,7 @@ NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如
![](img/ca953354-cd40-4edc-b718-2a94f81f88b8.png)
# 自定义功能
## 自定义函数
如前所述,我们可以创建自己的`ufuncs`。 创建`ufuncs`的一种方法是使用现有的`ufuncs`,向量化操作,数组方法等(即 Numpy 的所有现有基础结构)来创建一个函数,该函数逐个组件地生成我们想要的结果。 假设由于某些原因我们不想这样做。 如果我们有一个现有的 Python 函数,而只想对该函数进行向量化处理,以便将其应用于`ndarray`组件,则可以使用 NumPy 的`vectorize`函数创建该函数的新向量化版本。 `vectorize`将功能作为输入,并将功能的向量化版本作为输出。
......@@ -393,6 +393,6 @@ NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如
请注意,第一个功能比手动创建的第二个功能要慢得多。 实际上,它慢了将近 10 倍。
# 摘要
## 总结
在本章中,我们从显式选择数组中的元素开始。 我们研究了高级索引编制和扩展数组。 我们还用数组介绍了一些算术和线性代数。 我们讨论了使用数组方法和函数以及`ufuncs`的向量化。 在下一章中,我们将开始学习另一个有影响力的软件包,称为 **Pandas**
\ No newline at end of file
......@@ -2,7 +2,7 @@
在之前的章节中,我们已经讨论过 NumPy。 现在让我们继续学习 pandas,这是一个经过精心设计的软件包,用于在 Python 中存储,管理和处理数据。 我们将从讨论什么是 Pandas 以及人们为什么使用 Pandas 开始本章。 接下来,我们将讨论 Pandas 提供的两个最重要的对象:序列和数据帧。 然后,我们将介绍如何子集您的数据。 在本章中,我们将简要概述什么是 Pandas 以及其受欢迎的原因。
# Pandas 做什么?
## Pandas 做什么?
pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可能是最有用的,但是 pandas DataFrames 可以认为是绑定在一起的系列。 系列是一系列数据,例如基本 Python 中的列表或一维 NumPy 数组。 而且,与 NumPy 数组一样,序列具有单个数据类型,但是用序列进行索引是不同的。 使用 NumPy 时,对行和列索引的控制不多; 但是对于一个系列,该系列中的每个元素都必须具有唯一的索引,名称,键,但是您需要考虑一下。 该索引可以由字符串组成,例如一个国家中的城市,而序列中的相应元素表示一些统计值,例如城市人口; 或日期,例如股票系列的交易日。
......@@ -72,11 +72,11 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
现在是时候仔细看一下 pandas 系列和数据帧了。
# 探索系列和数据帧对象
## 探索序列和数据帧对象
我们将开始研究 pandas 系列和数据帧对象。 在本节中,我们将通过研究 Pandas 系列和数据帧的创建方式来开始熟悉它们。 我们将从系列开始,因为它们是数据帧的构建块。 系列是包含单一类型数据的一维数组状对象。 仅凭这一事实,您就可以正确地得出结论,它们与一维 NumPy 数组非常相似,但是与 NumPy 数组相比,序列具有不同的方法,这使它们更适合管理数据。 可以使用索引创建索引,该索引是标识系列内容的元数据。 系列可以处理丢失的数据; 他们通过用 NumPy 的 NaN 表示丢失的数据来做到这一点。
# 创建系
## 创建序
我们可以从类似数组的对象创建序列; 其中包括列表,元组和 NumPy `ndarray`对象。 我们还可以根据 Python 字典创建系列。 向系列添加索引的另一种方法是通过将唯一哈希值的索引或类似数组的对象传递给系列的创建方法的`index`参数来创建索引。
......@@ -110,7 +110,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
现在,我想提请您注意以下事实:这些系列的长度不相等,而且它们也不都包含相同的键。 它们并非全部或都包含相同的索引。 我们稍后将使用这些系列,因此请记住这一点。
# 创建数据框
## 创建数据帧
系列很有趣,主要是因为它们用于构建 pandas 数据帧。 我们可以将 pandas 数据帧视为将系列组合在一起以形成表格对象,其中行和列为系列。 我们可以通过多种方式创建数据帧,我们将在此处进行演示。 我们可以给数据帧一个索引。 我们还可以通过设置`columns`参数来手动指定列名。 选择列名遵循与选择索引名相同的规则。
......@@ -158,7 +158,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
![](img/96d001d2-c8b3-4668-8aed-7a384d1d5afe.png)
# 新增资料
## 新增数据
创建系列或数据帧之后,我们可以使用`concat`函数或`append`方法向其中添加更多数据。 我们将一个对象传递给包含将添加到现有对象中的数据的方法。 如果我们正在使用数据帧,则可以附加新行或新列。 我们可以使用`concat`函数添加新列,并使用`dict`,系列或数据帧进行串联。
......@@ -176,7 +176,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
![](img/9d8d6515-f3c5-4035-964f-2da367628601.png)
# 保存数据框
## 保存数据帧
假设我们有一个数据帧; 称它为`df`。 我们可以轻松保存数据帧的数据。 我们可以使用`to_pickle`方法对数据帧进行腌制(将其保存为 Python 常用的格式),并将文件名作为第一个参数传递。
......@@ -190,13 +190,13 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
希望到目前为止,您对什么系列和数据帧更加熟悉。 接下来,我们将讨论在数据帧中设置数据子集,以便您可以快速轻松地获取所需的信息。
# 子集数据
## 选取数据子集
现在我们可以制作 pandas 系列和数据帧,让我们处理它们包含的数据。 在本节中,我们将看到如何获取和处理我们存储在 Pandas 系列或数据帧中的数据。 自然,这是一个重要的话题。 这些对象否则将毫无用处。
您不应该惊讶于如何对数据帧进行子集化有很多变体。 我们不会在这里涵盖所有特质; 请参考文档进行详尽的讨论。 但是,我们将讨论每个 Pandas 用户应该意识到的最重要的功能。
# 子系列化
## 创建子序列
让我们首先看一下系列。 由于它们与数据帧相似,因此有一些适用的关键课程。 子集序列的最简单方法是用方括号括起来,我们可以这样做,就像我们将列表或 NumPy 数组子集化一样。 冒号运算符确实在这里工作,但我们还有更多工作要做。 我们可以根据序列的索引选择元素,而不是仅根据序列中元素的位置,遵循许多相同的规则,就好像我们使用指示序列中元素位置的整数一样。
......@@ -218,7 +218,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
我们有一个序列,并且该序列具有`index`的整数,该整数的顺序不为 0 到 4。 现在,订单混合了。 考虑我们要求的索引。 会发生什么? 一方面,我们可以说最后一个命令将基于索引进行选择。 因此它将选择元素 2 和 4; 他们之间什么都没有。 但另一方面,它可能会使用整数位置来选择系列的第三和第四元素。 换句话说,当我们从 0 开始计数时,它是位置 2 和位置 3,就像您希望将`srs2`视为列表一样。 哪种行为会占上风? 还不是很清楚。
# 索引方法
## 索引方法
Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引。 我们还可以区分基于系列索引值的索引和基于对象在系列中的位置的索引,就像处理列表一样。 我们将关注的两种方法是`loc``iloc``loc`专注于根据序列的索引进行选择,如果我们尝试选择不存在的关键元素,则会出现错误。`iloc`就像我们在处理 Python 列表一样建立索引; 也就是说,它基于整数位置进行索引。 因此,如果我们尝试在`iloc`中使用非整数进行索引,或者尝试选择有效整数范围之外的元素,则会产生错误。 有一种`hybrid`方法`ix`,其作用类似于`loc`,但是如果传递的输入无法针对索引进行解释,则它的作用将类似于`iloc`。 由于`ix`的行为模棱两可,因此我建议大多数时候坚持使用`loc``iloc`
......@@ -226,7 +226,7 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引
![](img/fbd66516-62ee-411e-a047-fc38a67c14c5.png)
# 切片数据框
## 切片数据帧
在讨论切片系列之后,让我们谈谈切片数据帧。 好消息是,在谈论系列切片时,许多艰苦的工作已经完成。 我们介绍了`loc``iloc`作为串联方法,但它们也是数据帧方法。 毕竟,您应该考虑将数据帧视为多个列粘合在一起的系列。
......@@ -274,6 +274,6 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引
这种行为与您在 NumPy 中看到的行为非常相似,因此我将不做过多讨论。 关于子集,还有很多要说的,特别是当索引实际上是`MultiIndex`时,但这是以后使用的。
# 摘要
## 总结
在本章中,我们介绍了 Pandas 并研究了它的作用。 我们探索了 Pandas 系列数据帧并创建了它们。 我们还研究了如何将数据添加到序列和数据帧中。 最后,我们介绍了保存数据帧。 在下一章中,我们将讨论算术,函数应用和函数映射。
\ No newline at end of file
......@@ -2,7 +2,7 @@
我们已经看到了使用 pandas 序列和数据帧完成的一些基本任务。 让我们继续进行更有趣的应用。 在本章中,我们将重新讨论先前讨论的一些主题,这些主题涉及将算术函数应用于多元对象并处理 Pandas 中的缺失数据。
# 算术
## 算术
让我们来看一个例子。 我们要做的第一件事是启动 pandas 和 NumPy。
......@@ -78,15 +78,15 @@
这也适用于功能,例如应用方式。
# 数据帧的算术
## 数据帧的算术
数据帧之间的算术与序列或 NumPy 数组算术具有某些相似之处。 如您所料,两个数据帧或一个数据帧与一个缩放器之间的算术工作; 但是数据帧和系列之间的算术运算需要谨慎。 必须牢记的是,涉及数据帧的算法首先应用于数据帧的列,然后再应用于数据帧的行。 因此,数据帧中的列将与单个标量,具有与该列同名的索引的系列元素或其他涉及的数据帧中的列匹配。 如果有序列或数据帧的元素找不到匹配项,则会生成新列,对应于不匹配的元素或列,并填充 Nan。
# 使用数据帧进行向量化
## 数据帧和向量化
向量化可以应用于数据帧。 给定一个数据帧时,许多 NumPy `ufuncs`(例如平方根或`sqrt`)将按预期工作; 实际上,当给定数据帧时,它们仍可能返回数据帧。 也就是说,这不能保证,尤其是在使用通过`vectorize`创建的自定义`ufunc`时。 在这种情况下,他们可能会返回`ndarray`。 虽然这些方法适用于具有通用数据类型的数据帧,但是不能保证它们将适用于所有数据帧。
# DataFrame 函数应用
## 数据帧的函数应用
毫不奇怪,数据帧提供了函数应用的方法。 您应注意两种方法:`apply``applymap``apply`带有一个函数,默认情况下,将该函数应用于与数据帧的每一列相对应的序列。 产生的内容取决于函数的功能。 我们可以更改`apply``axis`参数,以便将其应用于行(即跨列),而不是应用于列(即跨行)。`applymap`具有与应用不同的目的。 鉴于`apply`将求值每一列上提供的功能,因此应准备进行一系列研究,而`applymap`将分别求值数据帧的每个元素上的`pass`功能。
......@@ -148,7 +148,7 @@
接下来,我们将讨论解决数据帧中丢失数据的方法。
# 处理 Pandas 数据帧中的丢失数据
## 处理 Pandas 数据帧中的丢失数据
在本节中,我们将研究如何处理 Pandas 数据帧中的丢失数据。 我们有几种方法可以检测对系列和数据帧都有效的缺失数据。 我们可以使用 NumPy 的`isnan`函数; 我们还可以使用序列和数据帧提供的`isnull``notnull`方法进行检测。 NaN 检测对于处理丢失信息的自定义方法可能很有用。
......@@ -174,7 +174,7 @@
![](img/2696fb61-724d-4539-a2ff-062ff73ea35f.png)
# 删除缺失的信息
## 删除缺失的信息
系列和数据帧的`dropna`可用于创建对象的副本,其中删除了丢失的信息行。 默认情况下,它将删除缺少任何数据的行,并且与系列一起使用时,它将使用 NaN 消除元素。 如果要适当完成此操作,请将`inplace`参数设置为`true`
......@@ -190,7 +190,7 @@
有时,在计算某些指标时会忽略掉丢失的信息。 例如,在计算特定指标(例如均值,总和,标准差等)时,简单地排除丢失的信息根本没有问题。 尽管可以更改参数来控制此行为(可能由`skipna`之类的参数指定),但是默认情况下,这是由许多 pandas 方法完成的。 当我们尝试填充丢失的数据时,此方法可能是一个很好的中间步骤。 例如,我们可以尝试用非缺失数据的平均值填充一列中的缺失数据。
# 填写缺少的信息
## 填充缺失的信息
我们可以使用`fillna`方法来替换系列或数据帧中丢失的信息。 我们给`fillna`一个对象,该对象指示该方法应如何替换此信息。 默认情况下,该方法创建一个新的数据帧或系列。 我们可以给`fillna`一个值,一个`dict`,一个序列或一个数据帧。 如果给定单个值,那么所有指示缺少信息的条目将被该值替换。`dict`可用于更高级的替换方案。`dict`的值可以对应于数据帧的列;例如, 可以将其视为告诉如何填充每一列中的缺失信息。 如果使用序列来填充序列中的缺失信息,那么过去的序列将告诉您如何用缺失的数据填充序列中的特定条目。 类似地,当使用数据帧填充数据帧中的丢失信息时,也是如此。
......@@ -246,6 +246,6 @@
![](img/c90d4236-1ea9-4d4d-b221-4ad6e8ec27f9.png)
# 摘要
## 总结
在本章中,我们介绍了 Pandas 数据帧,向量化和数据帧函数应用的算术运算。 我们还学习了如何通过删除或填写缺失的信息来处理 pandas 数据帧中的缺失数据。 在下一章中,我们将研究数据分析项目中的常见任务,排序和绘图。
\ No newline at end of file
# 管理,建立索引和绘图
# 排序,建立索引和绘图
现在让我们简要介绍一下使用 pandas 方法对数据进行排序。 在本章中,我们将研究排序和排名。 排序是将数据按各种顺序排列,而排名则是查找数据如果经过排序将位于哪个顺序中。 我们将看看如何在 Pandas 中实现这一目标。 我们还将介绍 Pandas 的分层索引和绘图。
# 索引排序
## 按索引排序
在谈论排序时,我们需要考虑我们到底要排序什么。 有行,列,它们的索引以及它们包含的数据。 让我们首先看一下索引排序。 我们可以使用`sort_index`方法重新排列数据帧的行,以使行索引按顺序排列。 我们还可以通过将`sort_index`的访问参数设置为`1`来对列进行排序。 默认情况下,排序是按升序进行的; 后几行的值比前几行大,但是我们可以通过将`sort_index`值的升值设置为`false`来更改此行为。 这按降序排序。 默认情况下,此操作未就位。 为此,您需要将`sort_index`的就地参数设置为`true`
......@@ -18,7 +18,7 @@
![](img/02543552-9690-4d59-a8f0-62940f0f83c7.png)
# 按值排序
## 按值排序
如果我们希望对数据帧的行或一系列元素进行排序,则需要使用`sort_values`方法。 对于系列,您可以致电`sort_values`并每天致电。 但是,对于数据帧,您需要设置`by`参数; 您可以将`by`设置为一个字符串,以指示要作为排序依据的列,或者设置为字符串列表,以指示列名称。 根据该列表的第一列,将首先进行的排序; 然后,当出现领带时,将根据下一列进行排序,依此类推。
......@@ -40,7 +40,7 @@
结果,这两个都排在第五位。 接下来,我们讨论分层索引。
# 分层索引
## 分层索引
我们已经走了很长一段路,但是还没有完成。 我们需要谈论分层索引。 在本节中,我们研究层次索引,为何有用,如何创建索引以及如何使用它们。
......@@ -62,7 +62,7 @@
注意,这些产生相同的结果。
# 用分层索引切片序列
## 切片带有分层索引的序列
在切片时,一系列的层次索引类似于 NumPy 多维数组。 例如,如果使用方括号访问器,我们只需用逗号分隔层次结构索引的级别,然后对每个级别进行切片,就可以想象它们是某些高维对象各个维度的单独索引。 这适用于`loc`方法和序列,但不适用于数据帧; 我们待会儿再看。 使用`loc`时,切片索引时所有常用的技巧仍然有效,但是切片操作获得多个结果会更容易。
......@@ -112,7 +112,7 @@
并注意,我们也一直在将索引调用传递给列,因为这是一个完全独立的调用。 现在,我们继续使用 Pandas 提供的绘图方法。
# 用 Pandas 绘图
## 用 Pandas 绘图
在本节中,我们将讨论 pandas 序列和数据帧提供的绘图方法。 您将看到如何轻松快速地创建许多有用的图。 Pandas 尚未提出完全属于自己的绘图功能。 相反,使用 pandas 方法从 pandas 对象创建的图只是对称为 **Matplotlib** 的绘图库进行更复杂调用的包装。 这是科学 Python 社区中众所周知的库,它是最早的绘图系统之一,也许是最常用的绘图系统,尽管其他绘图系统正在寻求替代它。
......@@ -120,7 +120,7 @@
无论如何,如果我们希望能够使用 pandas 方法进行绘图,则必须安装 Matplotlib 并可以使用。 如果您正在使用 Jupyter 笔记本或 Jupyter QtConsole 或其他基于 IPython 的环境,则建议运行`pylab`魔术。
# 绘图方法
## 绘图方法
关键的 pandas 对象,系列和数据帧提供了一种绘图方法,简称为`plot`。 它可以轻松地创建图表,例如折线图,散点图,条形图或所谓的核密度估计图(用于了解数据的形状) , 等等。 可以创建许多图。 我们可以通过将`plot`中的`kind`参数设置为字符串来控制所需的绘图,以指示所需的绘图。 通常,这会产生一些带有通常选择的默认参数的图。 通过在`plot`方法中指定其他参数,我们可以更好地控制最终输出,然后将这些参数传递给 Matplotlib。 因此,我们可以控制诸如标签,绘图样式,*x* 限制,*y* 限制,不透明度和其他详细信息之类的问题。
......@@ -196,7 +196,7 @@
您可以创建更多图。 我诚挚地邀请您探索绘图方法,不仅是 Pandas 的绘图方法(我提供了许多示例的文档链接),而且还探讨了 Matplotlib。
# 摘要
## 总结
在本章中,我们从索引排序开始,并介绍了如何通过值进行排序。 我们介绍了层次聚类,并用层次索引对系列进行了切片。 最后,我们看到了各种绘图方法并进行了演示。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册