Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
apachecn-ds-zh
提交
702320cf
A
apachecn-ds-zh
项目概览
OpenDocCN
/
apachecn-ds-zh
10 个月 前同步成功
通知
1
Star
287
Fork
69
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-ds-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
702320cf
编写于
7月 14, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-07-14 22:56:58
上级
dd8a584a
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
42 addition
and
42 deletion
+42
-42
docs/handson-data-analysis-numpy-pandas/0.md
docs/handson-data-analysis-numpy-pandas/0.md
+1
-1
docs/handson-data-analysis-numpy-pandas/1.md
docs/handson-data-analysis-numpy-pandas/1.md
+10
-10
docs/handson-data-analysis-numpy-pandas/2.md
docs/handson-data-analysis-numpy-pandas/2.md
+7
-7
docs/handson-data-analysis-numpy-pandas/3.md
docs/handson-data-analysis-numpy-pandas/3.md
+12
-12
docs/handson-data-analysis-numpy-pandas/4.md
docs/handson-data-analysis-numpy-pandas/4.md
+2
-2
docs/handson-data-analysis-numpy-pandas/5.md
docs/handson-data-analysis-numpy-pandas/5.md
+4
-4
docs/master-exp-analysis-pandas/0.md
docs/master-exp-analysis-pandas/0.md
+1
-1
docs/master-exp-analysis-pandas/1.md
docs/master-exp-analysis-pandas/1.md
+1
-1
docs/master-exp-analysis-pandas/3.md
docs/master-exp-analysis-pandas/3.md
+4
-4
未找到文件。
docs/handson-data-analysis-numpy-pandas/0.md
浏览文件 @
702320cf
...
...
@@ -2,7 +2,7 @@
Python 是一种多范式编程语言,已成为数据科学家进行数据分析,可视化和机器学习的首选语言。
您将首先学习如何为 Python 建立正确的数据分析环境。 在这里,您将学习安装正确的 Python 发行版,以及使用 Jupyter 笔记本和建立数据库。 之后,您将深入研究 Python 的 NumPy 软件包 -- Python 的强大扩展以及高级数学
功能
。 您将学习如何创建 NumPy 数组,以及如何使用不同的数组方法和函数。 然后,您将探索 Python 的 pandas 扩展,在那里您将学习数据的子集,并深入研究使用 pandas 的数据映射。 您还将学习通过对数据集进行排序和排序来管理它们。
您将首先学习如何为 Python 建立正确的数据分析环境。 在这里,您将学习安装正确的 Python 发行版,以及使用 Jupyter 笔记本和建立数据库。 之后,您将深入研究 Python 的 NumPy 软件包 -- Python 的强大扩展以及高级数学
函数
。 您将学习如何创建 NumPy 数组,以及如何使用不同的数组方法和函数。 然后,您将探索 Python 的 pandas 扩展,在那里您将学习数据的子集,并深入研究使用 pandas 的数据映射。 您还将学习通过对数据集进行排序和排序来管理它们。
到本书结尾,您将学习对数据进行索引和分组以进行复杂的数据分析和处理。
...
...
docs/handson-data-analysis-numpy-pandas/1.md
浏览文件 @
702320cf
...
...
@@ -42,7 +42,7 @@ Linux 安装必须通过命令行完成,但是对于那些熟悉 Linux 安装
在本节中,我们将探索 Jupyter 笔记本,这是我们将使用 Python 进行数据分析的主要工具。 我们将看到什么是 Jupyter 笔记本,还将讨论 Markdown,这是我们在 Jupyter 笔记本中用于创建格式化文本的工具。 在 Jupyter 笔记本中,有两种类型的块。 有一些可执行的 Python 代码块,然后是带格式的,人类可读的文本块。
用户执行 Python 代码块,然后将结果直接插入文档中。 除非以同样的方式运行,否则代码块可以以任何顺序重新运行,而不必影响以后的块。 由于 Jupyter 笔记本基于 IPython,因此有一些附加功能,例如魔术
功能
。
用户执行 Python 代码块,然后将结果直接插入文档中。 除非以同样的方式运行,否则代码块可以以任何顺序重新运行,而不必影响以后的块。 由于 Jupyter 笔记本基于 IPython,因此有一些附加功能,例如魔术
命令
。
Anaconda 随附 Jupyter 笔记本。 Jupyter 笔记本允许纯文本与代码混合。 可以使用称为
**Markdown**
的语言格式化纯文本。 它以纯文本格式完成。 我们也可以插入段落。 以下示例是您在 Markdown 中看到的一些常见语法:
...
...
@@ -82,39 +82,39 @@ Anaconda 随附 Jupyter 笔记本。 Jupyter 笔记本允许纯文本与代码
![](
img/2565c2e6-345d-4b1e-a1c2-7d3f5c795ea6.png
)
我们也可以导入库。 例如,我们可以从 Matplotlib 导入模块。 在这种情况下,为了使 Matplotlib 在 Jupyter 笔记本中交互工作,我们将需要使用魔术
函数,该魔术函数以%开头,魔术函数
的名称以及需要传递给的任何类型的参数。 它。 稍后,我们将在详细信息中介绍这些内容,但首先让我们运行该单元格。
`plt`
现在已经加载,现在我们可以使用它了。 例如,在最后一个单元格中,我们将输入以下代码:
我们也可以导入库。 例如,我们可以从 Matplotlib 导入模块。 在这种情况下,为了使 Matplotlib 在 Jupyter 笔记本中交互工作,我们将需要使用魔术
命令,该魔术命令以%开头,魔术命令
的名称以及需要传递给的任何类型的参数。 它。 稍后,我们将在详细信息中介绍这些内容,但首先让我们运行该单元格。
`plt`
现在已经加载,现在我们可以使用它了。 例如,在最后一个单元格中,我们将输入以下代码:
![](
img/cd197191-9798-46d6-9448-bed5424046a6.png
)
请注意,此单元格的输出直接插入到文档中。 我们可以立即 看到创建的图。 回到魔术
函数,这不是我们唯一可用的函数。 让我们看看其他功能
:
请注意,此单元格的输出直接插入到文档中。 我们可以立即 看到创建的图。 回到魔术
命令,这不是我们唯一可用的命令。 让我们看看其他命令
:
*
魔术
功能
`magic`
将打印有关魔术系统的信息,如以下屏幕截图所示:
*
魔术
命令
`magic`
将打印有关魔术系统的信息,如以下屏幕截图所示:
![](
img/0f3e2361-f268-4a4c-906f-a07c8abfb37e.png
)
魔术命令的输出
*
另一个有用的
功能
是
`timeit`
,我们可以使用它来分析代码。 我们首先输入
`timeit`
,然后输入我们希望分析的代码,如下所示:
*
另一个有用的
命令
是
`timeit`
,我们可以使用它来分析代码。 我们首先输入
`timeit`
,然后输入我们希望分析的代码,如下所示:
![](
img/7568717e-d006-4017-9604-acd103872739.png
)
*
魔术
函数
`pwd`
可用于查看工作目录是什么,如下所示:
*
魔术
命令
`pwd`
可用于查看工作目录是什么,如下所示:
![](
img/40e2e58c-e439-408c-9599-ecddba61f8b8.png
)
*
魔术
函数
`cd`
可用于更改工作目录,如下所示:
*
魔术
命令
`cd`
可用于更改工作目录,如下所示:
![](
img/17797748-fa2f-487f-b02c-d0059a261bf1.png
)
*
如果我们希望以交互模式启动 Matplotlib 和 NumPy,魔术
函数
`pylab`
很有用,如下所示:
*
如果我们希望以交互模式启动 Matplotlib 和 NumPy,魔术
命令
`pylab`
很有用,如下所示:
![](
img/4c06dc29-3b70-487d-9d98-7e13353944c9.png
)
如果希望查看可用魔术
功能
的列表,可以键入
`lsmagic`
,如下所示:
如果希望查看可用魔术
命令
的列表,可以键入
`lsmagic`
,如下所示:
![](
img/e34823c6-6be8-4696-bc06-5e54f9cff9d1.png
)
如果需要快速参考表,可以使用魔术
函数
`quickref`
,如下所示:
如果需要快速参考表,可以使用魔术
命令
`quickref`
,如下所示:
![](
img/29c90042-1537-4075-88dd-edec313c9025.png
)
...
...
docs/handson-data-analysis-numpy-pandas/2.md
浏览文件 @
702320cf
...
...
@@ -52,7 +52,7 @@
除了
`dtype`
对象之外,NumPy 还引入了特殊的数值:
`nan`
和
`inf`
。 这些可以在数学计算中出现。
**不是数字**
(
`NaN`
)。 它表明应为数字的值实际上不是数学定义的。 例如,
`0/0`
产生
`nan`
。 有时
`nan`
也用于表示缺少的信息; 例如,Pandas 就用这个。
`inf`
表示任意大的数量,因此在实践中,它表示比计算机可以想象的任何数量大的数量。 还定义了
`-inf`
,它的意思是任意小。 如果数字运算爆炸,即迅速增长而没有边界,则可能会发生这种情况。
从未等于
`nan`
; 没有定义的事物等于其他事物是没有意义的。 您需要使用 NumPy 函数
`isnan`
来识别
`nan`
。 尽管
`==`
符号不适用于
`nan`
,但适用于
`inf`
。 就是说,最好还是使用函数有限或
`inf`
来区分有限值和无限值。 定义了涉及
`nan`
和
`inf`
的算法,但请注意,它可能无法满足您的需求。 定义了一些特殊
功能,以帮助避免出现
`nan`
或
`inf`
时出现的问题。 例如,
`nansum`
在忽略
`nan`
的同时计算可迭代对象的总和。 您可以在 NumPy 文档中找到此类功能
的完整列表。 使用它们时,我只会提及它们。
从未等于
`nan`
; 没有定义的事物等于其他事物是没有意义的。 您需要使用 NumPy 函数
`isnan`
来识别
`nan`
。 尽管
`==`
符号不适用于
`nan`
,但适用于
`inf`
。 就是说,最好还是使用函数有限或
`inf`
来区分有限值和无限值。 定义了涉及
`nan`
和
`inf`
的算法,但请注意,它可能无法满足您的需求。 定义了一些特殊
函数,以帮助避免出现
`nan`
或
`inf`
时出现的问题。 例如,
`nansum`
在忽略
`nan`
的同时计算可迭代对象的总和。 您可以在 NumPy 文档中找到此类函数
的完整列表。 使用它们时,我只会提及它们。
现在让我们来看一个例子:
...
...
@@ -96,9 +96,9 @@
## 创建 NumPy 数组
现在,我们已经讨论了 NumPy 数据类型,并简要介绍了 NumPy 数组,下面让我们讨论如何创建 NumPy 数组。 在本节中,我们将使用各种函数创建 NumPy 数组。 有一些函数可以创建所谓的空
`ndarray`
; 用于创建
`ndarray`
的函数,其中填充了 0、1 或随机数; 以及使用数据创建
`ndarray`
的
功能
。 我们将讨论所有这些,以及从磁盘保存和加载 NumPy 数组。 有几种创建数组的方法。 一种方法是使用数组函数,在此我们提供一个可迭代的对象或一个可迭代的对象列表,从中将生成一个数组。
现在,我们已经讨论了 NumPy 数据类型,并简要介绍了 NumPy 数组,下面让我们讨论如何创建 NumPy 数组。 在本节中,我们将使用各种函数创建 NumPy 数组。 有一些函数可以创建所谓的空
`ndarray`
; 用于创建
`ndarray`
的函数,其中填充了 0、1 或随机数; 以及使用数据创建
`ndarray`
的
函数
。 我们将讨论所有这些,以及从磁盘保存和加载 NumPy 数组。 有几种创建数组的方法。 一种方法是使用数组函数,在此我们提供一个可迭代的对象或一个可迭代的对象列表,从中将生成一个数组。
我们将使用列表列表来执行此操作,但是这些列表可以是元组,元组的元组甚至其他数组的列表。 还有一些方法可以自动创建充满数据的数组。 例如,我们可以使用诸如
`ones`
,
`zeros`
或
`randn`
之类的
功能
; 后者填充了随机生成的数据。 这些数组需要传递一个元组,该元组确定数组的形状,即数组具有多少维以及每个维的长度。 每个创建的数组都被认为是空的,不包含任何感兴趣的数据。 这通常是垃圾数据,由创建数组的内存位置中的任何位组成。
我们将使用列表列表来执行此操作,但是这些列表可以是元组,元组的元组甚至其他数组的列表。 还有一些方法可以自动创建充满数据的数组。 例如,我们可以使用诸如
`ones`
,
`zeros`
或
`randn`
之类的
函数
; 后者填充了随机生成的数据。 这些数组需要传递一个元组,该元组确定数组的形状,即数组具有多少维以及每个维的长度。 每个创建的数组都被认为是空的,不包含任何感兴趣的数据。 这通常是垃圾数据,由创建数组的内存位置中的任何位组成。
我们可以根据需要指定
`dtype`
参数,但如果不指定,则可以猜测
`dtype`
或浮点数。 请注意下表中的最后一行:
...
...
@@ -182,7 +182,7 @@
![](
img/d8ce83f0-5dbf-4559-9d09-05239a22de01.png
)
建议您使用
`save`
,
`savez`
或
`savetxt`
功能
。 我已经在上表中显示了这些函数的通用语法。 在
`savetxt`
的情况下,如果要用逗号分隔的文件,只需将定界符参数设置为逗号字符。 另外,如果文件名以
`.gz`
结尾,则
`savetxt`
可以保存压缩的文本文件,从而节省了步骤,因为您以后无需自己压缩文本文件。 请注意,除非您编写完整的文件路径,否则指定的文件将保存在工作目录中。
建议您使用
`save`
,
`savez`
或
`savetxt`
函数
。 我已经在上表中显示了这些函数的通用语法。 在
`savetxt`
的情况下,如果要用逗号分隔的文件,只需将定界符参数设置为逗号字符。 另外,如果文件名以
`.gz`
结尾,则
`savetxt`
可以保存压缩的文本文件,从而节省了步骤,因为您以后无需自己压缩文本文件。 请注意,除非您编写完整的文件路径,否则指定的文件将保存在工作目录中。
让我们看看我们如何能够保存一些数组。 我们可能应该做的第一件事是检查工作目录是什么:
...
...
@@ -202,7 +202,7 @@
![](
img/de072811-9bef-4e59-8ad2-ef193f5fe1c0.png
)
我们还可以创建一个在
`mat1`
中包含相同信息的 CSV 文件。 例如,我们可以使用以下
功能
保存它:
我们还可以创建一个在
`mat1`
中包含相同信息的 CSV 文件。 例如,我们可以使用以下
函数
保存它:
![](
img/432da793-afdb-4fc1-8d9c-c36e0c990774.png
)
...
...
@@ -214,11 +214,11 @@
![](
img/92e6a7fc-a97e-4011-ac75-8e2f08d2fe3e.png
)
现在,很明显,如果我们可以保存
`ndarray`
,那么我们也应该能够加载它们。 以下是一些用于加载
`ndarray`
的常用
功能
:
现在,很明显,如果我们可以保存
`ndarray`
,那么我们也应该能够加载它们。 以下是一些用于加载
`ndarray`
的常用
函数
:
![](
img/b74f654c-d2dd-4144-9fa4-d91ae823639a.png
)
这些
功能与用于保存
`ndarray`
的功能
紧密一致。 您将需要在 Python 中保存生成的
`ndarray`
。 如果要从文本文件加载,请注意,不必为创建
`ndarray`
而由 NumPy 创建数组。 如果您保存到 CSV,则可以使用文本编辑器或 Excel 创建 NumPy
`ndarray`
。 然后,您可以将它们加载到 Python 中。 我假设您正在加载的文件中的数据适合
`ndarray`
; 也就是说,它具有正方形格式,并且仅由一种类型的数据组成,因此不包含字符串和数字。
这些
函数与用于保存
`ndarray`
的函数
紧密一致。 您将需要在 Python 中保存生成的
`ndarray`
。 如果要从文本文件加载,请注意,不必为创建
`ndarray`
而由 NumPy 创建数组。 如果您保存到 CSV,则可以使用文本编辑器或 Excel 创建 NumPy
`ndarray`
。 然后,您可以将它们加载到 Python 中。 我假设您正在加载的文件中的数据适合
`ndarray`
; 也就是说,它具有正方形格式,并且仅由一种类型的数据组成,因此不包含字符串和数字。
可以通过
`ndarray`
处理多类型的数据,但是此时您应该使用 pandas 数据帧,我们将在后面的部分中进行讨论。 因此,如果我想加载刚刚创建的文件的内容,可以使用
`loadtxt`
函数进行加载,结果如下:
...
...
docs/handson-data-analysis-numpy-pandas/3.md
浏览文件 @
702320cf
...
...
@@ -132,7 +132,7 @@
## 扩展数组
连接
功能允许使用屏幕上显示的语法沿公共轴将数组绑定在一起。 该方法要求数组沿未用于绑定的轴具有相似的形状。 结果就是全新的
`ndarray`
,这是将数组粘合在一起的产物。 为此,还存在其他类似功能
,例如堆栈。 我们不会涵盖所有内容。
连接
函数允许使用屏幕上显示的语法沿公共轴将数组绑定在一起。 该方法要求数组沿未用于绑定的轴具有相似的形状。 结果就是全新的
`ndarray`
,这是将数组粘合在一起的产物。 为此,还存在其他类似函数
,例如堆栈。 我们不会涵盖所有内容。
假设我们想向
`arr2`
添加更多行。 使用以下代码执行此操作:
...
...
@@ -212,7 +212,7 @@ NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有
## 线性代数
请注意,NumPy 是为支持线性代数而构建的。 一维 NumPy 数组可以对应于线性代数向量; 矩阵的二维数组; 和 3D,4D 或所有
`ndarray`
到张量。 因此,在适当的时候,NumPy 支持线性代数运算,例如数组的矩阵乘积,转置,矩阵求逆等。
`linalg`
模块支持大多数 NumPy 线性代数
功能
。 以下是常用的 NumPy 线性代数函数的列表:
请注意,NumPy 是为支持线性代数而构建的。 一维 NumPy 数组可以对应于线性代数向量; 矩阵的二维数组; 和 3D,4D 或所有
`ndarray`
到张量。 因此,在适当的时候,NumPy 支持线性代数运算,例如数组的矩阵乘积,转置,矩阵求逆等。
`linalg`
模块支持大多数 NumPy 线性代数
函数
。 以下是常用的 NumPy 线性代数函数的列表:
![](
img/947424be-4f60-4dc5-ab46-b64a30b26289.png
)
...
...
@@ -238,7 +238,7 @@ NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有
您可以通过查看此数组的逻辑方式来猜测。
现在让我们看一些更复杂的线性代数
功能
。 让我们从 Sklearn 库的数据集模块中加载一个名为
`load_iris`
的函数,以便我们可以查看经典的鸢尾花数据集:
现在让我们看一些更复杂的线性代数
函数
。 让我们从 Sklearn 库的数据集模块中加载一个名为
`load_iris`
的函数,以便我们可以查看经典的鸢尾花数据集:
![](
img/97bf54b1-56e6-4936-9afa-b1bf10da93a9.png
)
...
...
@@ -282,11 +282,11 @@ NumPy 数组的算术总是按组件进行的。 这意味着,如果我们有
## 使用数组方法和函数
现在,我们将讨论 NumPy 数组方法和函数的使用。 在本节中,我们将研究常见的
`ndarray`
函数和方法。 这些
功能
使您可以使用简洁,直观的语法执行常规任务,而不仅仅是 Python 代码的概念。
现在,我们将讨论 NumPy 数组方法和函数的使用。 在本节中,我们将研究常见的
`ndarray`
函数和方法。 这些
函数
使您可以使用简洁,直观的语法执行常规任务,而不仅仅是 Python 代码的概念。
## 数组方法
NumPy
`ndarray`
函数包含一些有助于完成常见任务的方法,例如查找数据集的均值或多个数据集的多个均值。 我们可以对数组的行和列进行排序,找到数学和统计量,等等。 有很多
功能可以完成很多事情! 我不会全部列出。 在下面,我们看到了常见管理任务所需的功能
,例如将数组解释为列表或对数组内容进行排序:
NumPy
`ndarray`
函数包含一些有助于完成常见任务的方法,例如查找数据集的均值或多个数据集的多个均值。 我们可以对数组的行和列进行排序,找到数学和统计量,等等。 有很多
函数可以完成很多事情! 我不会全部列出。 在下面,我们看到了常见管理任务所需的函数
,例如将数组解释为列表或对数组内容进行排序:
![](
img/fcedd7e4-37bf-4748-811c-80ffbfad1457.png
)
...
...
@@ -339,7 +339,7 @@ NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如
## `ufuncs`的向量化
`ufunc`
是专门用于数组的 NumPy 函数; 特别地,它们支持向量化。 向量化函数按组件方式应用于数组的元素。 这些通常是高度优化的
功能
,可以在较快的语言(例如 C)的后台运行。
`ufunc`
是专门用于数组的 NumPy 函数; 特别地,它们支持向量化。 向量化函数按组件方式应用于数组的元素。 这些通常是高度优化的
函数
,可以在较快的语言(例如 C)的后台运行。
在下面,我们看到一些常见的
`ufuncs`
,其中许多是数学上的:
...
...
@@ -359,23 +359,23 @@ NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如
## 自定义函数
如前所述,我们可以创建自己的
`ufuncs`
。 创建
`ufuncs`
的一种方法是使用现有的
`ufuncs`
,向量化操作,数组方法等(即 Numpy 的所有现有基础结构)来创建一个函数,该函数逐个组件地生成我们想要的结果。 假设由于某些原因我们不想这样做。 如果我们有一个现有的 Python 函数,而只想对该函数进行向量化处理,以便将其应用于
`ndarray`
组件,则可以使用 NumPy 的
`vectorize`
函数创建该函数的新向量化版本。
`vectorize`
将
功能作为输入,并将功能
的向量化版本作为输出。
如前所述,我们可以创建自己的
`ufuncs`
。 创建
`ufuncs`
的一种方法是使用现有的
`ufuncs`
,向量化操作,数组方法等(即 Numpy 的所有现有基础结构)来创建一个函数,该函数逐个组件地生成我们想要的结果。 假设由于某些原因我们不想这样做。 如果我们有一个现有的 Python 函数,而只想对该函数进行向量化处理,以便将其应用于
`ndarray`
组件,则可以使用 NumPy 的
`vectorize`
函数创建该函数的新向量化版本。
`vectorize`
将
函数作为输入,并将函数
的向量化版本作为输出。
如果您不关心速度,可以使用
`vectorize`
,但是
`vectorize`
创建的
功能不一定很快。 实际上,前一种方法(使用 NumPy 的现有功能和基础结构来创建您的向量化功能
)可将
`ufuncs`
的生成速度提高许多倍。
如果您不关心速度,可以使用
`vectorize`
,但是
`vectorize`
创建的
函数不一定很快。 实际上,前一种方法(使用 NumPy 的现有函数和基础结构来创建您的向量化函数
)可将
`ufuncs`
的生成速度提高许多倍。
我们要做的第一件事是定义一个适用于单个标量值的函数。 它的作用是截断,因此如果一个数字小于零,则该数字将替换为零:
![](
img/3ff39dbc-d824-4de3-8b8b-faf4e2a98576.png
)
此
功能
未向量化; 让我们尝试将此函数应用于矩阵
`arr1`
:
此
函数
未向量化; 让我们尝试将此函数应用于矩阵
`arr1`
:
![](
img/04f9f215-dec1-4240-abf7-8eb57454d11e.png
)
然后,我们希望该矩阵中每个错误的数量都改为零。 但是,当我们尝试应用此
功能
时,它根本不起作用:
然后,我们希望该矩阵中每个错误的数量都改为零。 但是,当我们尝试应用此
函数
时,它根本不起作用:
![](
img/6cc5d3ea-e108-4b80-84b6-60cc1a24d15f.png
)
我们需要做的是创建一个
`ufunc`
,其
功能与原始功能
相同。 因此,我们使用 vectorize 并可以创建可以按预期工作的向量化版本,但效率不高:
我们需要做的是创建一个
`ufunc`
,其
函数与原始函数
相同。 因此,我们使用 vectorize 并可以创建可以按预期工作的向量化版本,但效率不高:
![](
img/bcddac11-fa34-4ee4-b31b-c01e539951bc.png
)
...
...
@@ -391,7 +391,7 @@ NumPy `ndarray`函数包含一些有助于完成常见任务的方法,例如
![](
img/359ff8e0-9562-4334-a16a-10c1e7f6a1d1.png
)
请注意,第一个
功能比手动创建的第二个功能
要慢得多。 实际上,它慢了将近 10 倍。
请注意,第一个
函数比手动创建的第二个函数
要慢得多。 实际上,它慢了将近 10 倍。
## 总结
...
...
docs/handson-data-analysis-numpy-pandas/4.md
浏览文件 @
702320cf
...
...
@@ -160,7 +160,7 @@ pandas 向 Python 引入了两个关键对象,序列和数据帧,后者可
## 新增数据
创建系列或数据帧之后,我们可以使用
`concat`
函数或
`append`
方法向其中添加更多数据。 我们将一个对象传递给包含将添加到现有对象中的数据的方法。 如果我们正在使用数据帧,则可以附加新行或新列。 我们可以使用
`concat`
函数添加新列,并使用
`dict`
,系列或数据帧进行
串联
。
创建系列或数据帧之后,我们可以使用
`concat`
函数或
`append`
方法向其中添加更多数据。 我们将一个对象传递给包含将添加到现有对象中的数据的方法。 如果我们正在使用数据帧,则可以附加新行或新列。 我们可以使用
`concat`
函数添加新列,并使用
`dict`
,系列或数据帧进行
连接
。
让我们看看如何将新信息添加到系列或数据帧中。 例如,让我们在
`pops`
系列中添加两个新城市,分别是
`Seattle`
和
`Denver`
。 结果如下:
...
...
@@ -228,7 +228,7 @@ Pandas 提供的方法可以使我们清楚地说明我们要如何编制索引
## 切片数据帧
在讨论切片系列之后,让我们谈谈切片数据帧。 好消息是,在谈论系列切片时,许多艰苦的工作已经完成。 我们介绍了
`loc`
和
`iloc`
作为
串联
方法,但它们也是数据帧方法。 毕竟,您应该考虑将数据帧视为多个列粘合在一起的系列。
在讨论切片系列之后,让我们谈谈切片数据帧。 好消息是,在谈论系列切片时,许多艰苦的工作已经完成。 我们介绍了
`loc`
和
`iloc`
作为
连接
方法,但它们也是数据帧方法。 毕竟,您应该考虑将数据帧视为多个列粘合在一起的系列。
现在,我们需要考虑从系列中学到的知识如何转换为二维设置。 如果我们使用括号表示法,它将仅适用于数据帧的列。 我们将需要使用
`loc`
和
`iloc`
来对数据帧的行进行子集化。 实际上,这些方法可以接受两个位置参数。 根据我们前面描述的规则,第一个位置参数确定要选择的行,第二个位置参数确定要选择的列。 可以发出第二个参数来选择所有列,并将选择规则仅应用于行。 这意味着我们应该将第一个参数作为冒号,以便在我们选择的列中更加挑剔。
...
...
docs/handson-data-analysis-numpy-pandas/5.md
浏览文件 @
702320cf
...
...
@@ -64,7 +64,7 @@
![](
img/3fa02489-e851-43ae-8a6c-3f9d4440aca9.png
)
现在,让我们谈谈
功能
应用和映射。 这类似于我们之前定义的截断函数。 我正在使用
`lambda`
表达式创建一个临时函数,然后将该临时函数应用于
`srs1`
的每个元素,如下所示:
现在,让我们谈谈
函数
应用和映射。 这类似于我们之前定义的截断函数。 我正在使用
`lambda`
表达式创建一个临时函数,然后将该临时函数应用于
`srs1`
的每个元素,如下所示:
![](
img/4ab5fcba-1a5b-4fc6-92fb-f0c3d827aa87.png
)
...
...
@@ -76,7 +76,7 @@
![](
img/8b1383d6-61e6-469b-b2ba-9120749a47b9.png
)
这也适用于
功能
,例如应用方式。
这也适用于
函数
,例如应用方式。
## 数据帧的算术
...
...
@@ -88,7 +88,7 @@
## 数据帧的函数应用
毫不奇怪,数据帧提供了函数应用的方法。 您应注意两种方法:
`apply`
和
`applymap`
。
`apply`
带有一个函数,默认情况下,将该函数应用于与数据帧的每一列相对应的序列。 产生的内容取决于函数的功能。 我们可以更改
`apply`
的
`axis`
参数,以便将其应用于行(即跨列),而不是应用于列(即跨行)。
`applymap`
具有与应用不同的目的。 鉴于
`apply`
将
求值每一列上提供的功能,因此应准备进行一系列研究,而
`applymap`
将分别求值数据帧的每个元素上的
`pass`
功能
。
毫不奇怪,数据帧提供了函数应用的方法。 您应注意两种方法:
`apply`
和
`applymap`
。
`apply`
带有一个函数,默认情况下,将该函数应用于与数据帧的每一列相对应的序列。 产生的内容取决于函数的功能。 我们可以更改
`apply`
的
`axis`
参数,以便将其应用于行(即跨列),而不是应用于列(即跨行)。
`applymap`
具有与应用不同的目的。 鉴于
`apply`
将
在每一列上求值提供的函数,因此应准备进行一系列研究,而
`applymap`
将分别求值数据帧的每个元素上的
`pass`
函数
。
我们可以使用
`apply`
函数来获取所需的数量,但是使用数据帧提供的现有方法通常更有用,并且也许更快。
...
...
@@ -170,7 +170,7 @@
![](
img/6f31c997-41ea-4863-bbea-39fc8e9fb8a3.png
)
`notnull`
功能基本上与
`isnull`
功能
完全相反; 缺少数据时返回
`false`
,不丢失数据时返回
`true`
,如下所示:
`notnull`
函数基本上与
`isnull`
函数
完全相反; 缺少数据时返回
`false`
,不丢失数据时返回
`true`
,如下所示:
![](
img/2696fb61-724d-4539-a2ff-062ff73ea35f.png
)
...
...
docs/master-exp-analysis-pandas/0.md
浏览文件 @
702320cf
...
...
@@ -6,7 +6,7 @@
# 这本书是给谁的
本书适用于希望了解流行的 pandas 库的新兴数据科学家,或希望踏入数据分析领域的 Python 开发人员
-如果您属于这两个类别,那么本书是您理想的参考资料
开始吧。
本书适用于希望了解流行的 pandas 库的新兴数据科学家,或希望踏入数据分析领域的 Python 开发人员
-- 如果您属于这两个类别,那么本书是您理想的参考资料。
开始吧。
# 本书涵盖的内容
...
...
docs/master-exp-analysis-pandas/1.md
浏览文件 @
702320cf
...
...
@@ -307,7 +307,7 @@ df = pd.read_excel('IMDB.xlsx', sheetname= 0, na_values=[' '])
# 读取 JSON 文件
JSON 是用于结构化数据的最小可读格式。 它主要用于在服务器和 Web 应用
程序
之间传输数据,以替代 XML,如以下屏幕快照所示:
JSON 是用于结构化数据的最小可读格式。 它主要用于在服务器和 Web 应用之间传输数据,以替代 XML,如以下屏幕快照所示:
![](
img/c67f9d24-a64c-43d4-9f07-d5eccf714d35.png
)
...
...
docs/master-exp-analysis-pandas/3.md
浏览文件 @
702320cf
...
...
@@ -676,14 +676,14 @@ data[['Age', 'Pclass']].applymap(np.square)
我们还将 Numpy 的
`secure`
方法应用于这两个列。
前面的步骤用于预定义
功能
。 现在,让我们继续创建自己的函数,然后将其应用于值,如下所示:
前面的步骤用于预定义
函数
。 现在,让我们继续创建自己的函数,然后将其应用于值,如下所示:
```
py
def
my_func
(
i
):
return
i
+
20
```
创建的函数是一个简单的函数,它带有一个值,将
`20`
添加到其中,然后返回结果。 我们使用
`applymap()`
将此
功能
应用于
`Age`
和
`Pclass`
列中的每个值,如下所示:
创建的函数是一个简单的函数,它带有一个值,将
`20`
添加到其中,然后返回结果。 我们使用
`applymap()`
将此
函数
应用于
`Age`
和
`Pclass`
列中的每个值,如下所示:
```
py
data
[[
'Age'
,
'Pclass'
]].
applymap
(
my_func
)
...
...
@@ -691,7 +691,7 @@ data[['Age', 'Pclass']].applymap(my_func)
![](
img/dcf93f0e-69c4-49fc-bcc1-65940f91727a.png
)
让我们继续学习有关将多个数据帧合并和
串联
在一起的知识。
让我们继续学习有关将多个数据帧合并和
连接
在一起的知识。
# 将多个数据帧合并并连接成一个
...
...
@@ -750,7 +750,7 @@ pd.concat([dataset1, dataset2], axis=1)
![](
img/cb6c49ea-455d-4c80-b0de-084fb965c0c7.png
)
数据集
串联的第三个变体是串联
具有不同行和列的数据集。 我们首先创建两个具有不同参数的数据集,如下所示:
数据集
连接的第三个变体是连接
具有不同行和列的数据集。 我们首先创建两个具有不同参数的数据集,如下所示:
```
py
dataset1
=
pd
.
DataFrame
({
'Age'
:
[
'32'
,
'26'
,
'29'
],
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录