diff --git a/.gitignore b/.gitignore index 79a8ddd..b2afc21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ **/.ipynb_checkpoints **/__pycache__ data/ +datasets/ *.json *.params *.DS_Store diff --git a/build.sh b/build.sh index 6b0758d..d092f7a 100644 --- a/build.sh +++ b/build.sh @@ -7,5 +7,5 @@ jupyter-book build ./ rm -rf docs mkdir docs touch docs/.nojekyll - +cp -r datasets ./docs/ rsync -a _build/html/* ./docs/ \ No newline at end of file diff --git a/ch-pandas/data-preprocessing.ipynb b/ch-pandas/data-preprocessing.ipynb index 2dab553..8f50fef 100644 --- a/ch-pandas/data-preprocessing.ipynb +++ b/ch-pandas/data-preprocessing.ipynb @@ -20,7 +20,11 @@ "iopub.status.busy": "2023-09-11T14:28:36.287206Z", "iopub.status.idle": "2023-09-11T14:28:36.942807Z", "shell.execute_reply": "2023-09-11T14:28:36.941596Z" - } + }, + "tags": [ + "hide code", + "hide-cell" + ] }, "outputs": [ { @@ -32,14 +36,12 @@ } ], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import os\n", "import urllib.request\n", "import zipfile\n", "import pandas as pd\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/pwt\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/pwt\")\n", "download_url = \"https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip\"\n", "file_name = download_url.split(\"/\")[-1]\n", "if not os.path.exists(folder_path):\n", diff --git a/ch-pandas/dataframe-groupby.ipynb b/ch-pandas/dataframe-groupby.ipynb index ef0615a..c0d0b36 100644 --- a/ch-pandas/dataframe-groupby.ipynb +++ b/ch-pandas/dataframe-groupby.ipynb @@ -29,7 +29,10 @@ "iopub.status.busy": "2023-09-18T00:08:11.016110Z", "iopub.status.idle": "2023-09-18T00:08:11.605146Z", "shell.execute_reply": "2023-09-18T00:08:11.604394Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -41,8 +44,6 @@ } ], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import os\n", "import urllib.request\n", "import zipfile\n", diff --git a/ch-pandas/dataframe-merge-concat.ipynb b/ch-pandas/dataframe-merge-concat.ipynb index ba65ce1..626e6d3 100644 --- a/ch-pandas/dataframe-merge-concat.ipynb +++ b/ch-pandas/dataframe-merge-concat.ipynb @@ -1063,7 +1063,10 @@ "iopub.status.busy": "2023-09-18T00:21:29.110565Z", "iopub.status.idle": "2023-09-18T00:21:29.123036Z", "shell.execute_reply": "2023-09-18T00:21:29.120657Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -1075,12 +1078,11 @@ } ], "source": [ - "# Hide outputs\n", "import urllib.request\n", "import os\n", "import pandas as pd\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/student-score\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/student-score\")\n", "score_download_url = \"score.csv\"\n", "student_attr_download_url = \"student.csv\"\n", "\n", diff --git a/ch-pandas/dataframe-slicing.ipynb b/ch-pandas/dataframe-slicing.ipynb index 4f772b7..fdf27c6 100644 --- a/ch-pandas/dataframe-slicing.ipynb +++ b/ch-pandas/dataframe-slicing.ipynb @@ -20,7 +20,10 @@ "iopub.status.busy": "2023-09-11T14:28:34.456141Z", "iopub.status.idle": "2023-09-11T14:28:35.515803Z", "shell.execute_reply": "2023-09-11T14:28:35.515056Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -32,14 +35,12 @@ } ], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import os\n", "import urllib.request\n", "import zipfile\n", "import pandas as pd\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/pwt\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/pwt\")\n", "download_url = \"https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip\"\n", "file_name = download_url.split(\"/\")[-1]\n", "if not os.path.exists(folder_path):\n", diff --git a/ch-pandas/series-dataframe.ipynb b/ch-pandas/series-dataframe.ipynb index b44f6b7..10d10f5 100644 --- a/ch-pandas/series-dataframe.ipynb +++ b/ch-pandas/series-dataframe.ipynb @@ -24,8 +24,6 @@ }, "outputs": [], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import pandas as pd" ] }, @@ -424,7 +422,10 @@ "iopub.status.busy": "2023-09-11T14:28:40.769708Z", "iopub.status.idle": "2023-09-11T14:28:40.775507Z", "shell.execute_reply": "2023-09-11T14:28:40.774814Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -440,7 +441,7 @@ "import urllib.request\n", "import zipfile\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/pwt\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/pwt\")\n", "download_url = \"https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip\"\n", "file_name = download_url.split(\"/\")[-1]\n", "if not os.path.exists(folder_path):\n", diff --git a/docs/_sources/ch-pandas/data-preprocessing.ipynb b/docs/_sources/ch-pandas/data-preprocessing.ipynb index c042c80..8f50fef 100644 --- a/docs/_sources/ch-pandas/data-preprocessing.ipynb +++ b/docs/_sources/ch-pandas/data-preprocessing.ipynb @@ -6,7 +6,6 @@ "metadata": {}, "source": [ "# 数据处理\n", - ":label:`data-preprocessing`\n", "\n", "数据处理工作包括处理重复值、缺失值和异常值,生成新的列或者行等。" ] @@ -21,7 +20,11 @@ "iopub.status.busy": "2023-09-11T14:28:36.287206Z", "iopub.status.idle": "2023-09-11T14:28:36.942807Z", "shell.execute_reply": "2023-09-11T14:28:36.941596Z" - } + }, + "tags": [ + "hide code", + "hide-cell" + ] }, "outputs": [ { @@ -33,14 +36,12 @@ } ], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import os\n", "import urllib.request\n", "import zipfile\n", "import pandas as pd\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/pwt\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/pwt\")\n", "download_url = \"https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip\"\n", "file_name = download_url.split(\"/\")[-1]\n", "if not os.path.exists(folder_path):\n", @@ -3423,4 +3424,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/_sources/ch-pandas/dataframe-groupby.ipynb b/docs/_sources/ch-pandas/dataframe-groupby.ipynb index fdda7b3..ef0615a 100644 --- a/docs/_sources/ch-pandas/dataframe-groupby.ipynb +++ b/docs/_sources/ch-pandas/dataframe-groupby.ipynb @@ -6,7 +6,6 @@ "metadata": {}, "source": [ "# 分组汇总\n", - ":label:`dataframe-groupby`\n", "\n", "实际的数据分析中,经常需要对某一类数据进行统计分析。比如,假如我们拥有全国所有人的身高和体重数据,我们想按照省份分组,统计每个省的平均身高和平均体重,这时候就需要使用分组操作。pandas 提供了 `groupby` 函数进行类似的分组汇总操作。:numref:`groupby-img` 计算平均身高的分组汇总流程,主要包括两部分:分组与汇总。其中分组阶段将同一类的内容归结到相同的组中;汇总阶段将所关心的数据进行计算,比如求和、求平均等。\n", "\n", diff --git a/docs/_sources/ch-pandas/dataframe-merge-concat.ipynb b/docs/_sources/ch-pandas/dataframe-merge-concat.ipynb index f09f920..626e6d3 100644 --- a/docs/_sources/ch-pandas/dataframe-merge-concat.ipynb +++ b/docs/_sources/ch-pandas/dataframe-merge-concat.ipynb @@ -6,7 +6,6 @@ "metadata": {}, "source": [ "# 多表操作\n", - ":label:`dataframe-merge-concat`\n", "\n", "之前的操作主要在单个 `DataFrame` ,实际上,我们经常需要对多个 `DataFrame` 联合起来进行分析。pandas 提供了多 `DataFrame` 之间的合并和连接的操作,分别是 `merge()` 和 `concat()` 函数。比如,我们可以将两个 `DataFrame` 合并成一个,且保留所有的列。\n", "\n", @@ -14,9 +13,6 @@ "\n", "pandas 的 `merge` 操作可以合并两个 `DataFrame`(或者称为表) ,类似于 SQL 中的 JOIN 操作。 我们可以想象成:一个大表被拆分成两个小表,两个小表都包含一些同样的数据。现在我们需要把两个小表合并,生成一个大表,大表包含了两个小表的字段。\n", "\n", - "![分组与汇总](../img/ch-pandas/merge.svg)\n", - ":width:`800px`\n", - ":label:`merge-img`\n", "```{figure} ../img/ch-pandas/merge.svg\n", "---\n", "name: merge-img\n", @@ -1067,7 +1063,10 @@ "iopub.status.busy": "2023-09-18T00:21:29.110565Z", "iopub.status.idle": "2023-09-18T00:21:29.123036Z", "shell.execute_reply": "2023-09-18T00:21:29.120657Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -1079,12 +1078,11 @@ } ], "source": [ - "# Hide outputs\n", "import urllib.request\n", "import os\n", "import pandas as pd\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/student-score\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/student-score\")\n", "score_download_url = \"score.csv\"\n", "student_attr_download_url = \"student.csv\"\n", "\n", diff --git a/docs/_sources/ch-pandas/dataframe-slicing.ipynb b/docs/_sources/ch-pandas/dataframe-slicing.ipynb index be5c7ef..fdf27c6 100644 --- a/docs/_sources/ch-pandas/dataframe-slicing.ipynb +++ b/docs/_sources/ch-pandas/dataframe-slicing.ipynb @@ -6,7 +6,6 @@ "metadata": {}, "source": [ "# 数据切片\n", - ":label:`dataframe-slicing`\n", "\n", "实际中,我们常常不是分析整个数据,而是数据中的部分子集。如何根据特定的条件获得所需要的数据是本节的主要内容。" ] @@ -21,7 +20,10 @@ "iopub.status.busy": "2023-09-11T14:28:34.456141Z", "iopub.status.idle": "2023-09-11T14:28:35.515803Z", "shell.execute_reply": "2023-09-11T14:28:35.515056Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -33,14 +35,12 @@ } ], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import os\n", "import urllib.request\n", "import zipfile\n", "import pandas as pd\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/pwt\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/pwt\")\n", "download_url = \"https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip\"\n", "file_name = download_url.split(\"/\")[-1]\n", "if not os.path.exists(folder_path):\n", @@ -2453,4 +2453,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/_sources/ch-pandas/series-dataframe.ipynb b/docs/_sources/ch-pandas/series-dataframe.ipynb index 2afeb5d..10d10f5 100644 --- a/docs/_sources/ch-pandas/series-dataframe.ipynb +++ b/docs/_sources/ch-pandas/series-dataframe.ipynb @@ -6,7 +6,6 @@ "metadata": {}, "source": [ "# Series 与 DataFrame\n", - ":label:`series-dataframe`\n", "\n", "pandas 的核心数据结构有两个: Series 和 DataFrame。" ] @@ -25,8 +24,6 @@ }, "outputs": [], "source": [ - "# Hide outputs\n", - "# Hide code\n", "import pandas as pd" ] }, @@ -425,7 +422,10 @@ "iopub.status.busy": "2023-09-11T14:28:40.769708Z", "iopub.status.idle": "2023-09-11T14:28:40.775507Z", "shell.execute_reply": "2023-09-11T14:28:40.774814Z" - } + }, + "tags": [ + "hide-cell" + ] }, "outputs": [ { @@ -441,7 +441,7 @@ "import urllib.request\n", "import zipfile\n", "\n", - "folder_path = os.path.join(os.getcwd(), \"./data/pwt\")\n", + "folder_path = os.path.join(os.getcwd(), \"../data/pwt\")\n", "download_url = \"https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip\"\n", "file_name = download_url.split(\"/\")[-1]\n", "if not os.path.exists(folder_path):\n", @@ -1218,4 +1218,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/ch-numpy copy/binary-ops.html b/docs/ch-numpy copy/binary-ops.html deleted file mode 100644 index 348934b..0000000 --- a/docs/ch-numpy copy/binary-ops.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - - -
- - -:maxdepth: 2
-
-numpy-intro
-ndarray
-
NumPy 最核心的数据结构是多维数组(N-dimensional Array): ndarray
。 ndarray
是由同一数据类型的数据组成的数组列表。
import numpy as np
-
array
函数接收来自原生 Python 的各类数据,如列表、元组等,并转化为 ndarray
;array
函数也可以接收一个 NumPy 的 ndarray
。数组中的数据类型必须是一致的。
# 列表 list
-ar1 = np.array([1,2,3,4])
-ar1
-
# 元组 tuple
-ar2 = np.array((1,2,3,4))
-ar2
-
在进一步深入了解各种创建 ndarray
的方式之前,我们需要了解一下数据类型的基础知识。计算机无法直接表征数值,其底层基于二进制表示数值,整数和浮点数(其实就是小数,计算机科学中一般称小数为浮点数)基于科学计数法,字符串是一个从整数到字符的映射。 NumPy 提供了不同的数据类型 dtype
,不同的 dtype
所能表示的区间范围不同。比如,同为整数,就有以下几种类型,其所表示的数值区间差异较大。
dtype |
-区间 |
-
---|---|
np.int8 |
--128 ~ 127 |
-
np.int16 |
--32768 ~ 32767 |
-
np.int32 |
-\(-2.1*10^9 \sim 2.1*10 ^9\) |
-
NumPy 所支持的数据类型主要有:
-np.bool_
:布尔类型
np.number
:又细分为整数(比如 np.int8
等)和浮点类型(np.float32
等)。
np.datetime64
:表示日期的数据类型
np.character
:字符串类型
这些数据类型往往都带有一个数字,比如 np.int8
,数字表示这个数据类型占用了多少个比特(bit)的存储空间。1 个 bit 为一个 0/1 二进制。8 bit = 1 byte,即 8 比特位等于 1 个字节。
根据上表,整数占用的存储空间越大,所能表示的数值范围越大。当我们编写简单的程序时,数值范围一般不会出现问题,但是当我们编写复杂的科学计算程序时,数值范围决定了计算的精度。例如,np.int8
只能表示 -128 ~ 127 范围的数值,超过这个数值的数字,如何被 np.int8
表示,存在较大不确定性,进而造成程序运行不准确。
占用的 bit 越多,数据越精准,但也会使得对内存消耗越大。选择合适的数据类型有助于节省内存。刚刚接触数据类型的朋友,对于如何选择合适数据类型并不熟悉。大概可以按照如下准则:
-整数类型默认是 np.int64
,但很多应用 np.32
就足够了。
浮点数类型一般科学计算应用都使用 np.float64
,深度学习类应用使用 np.float32
或者甚至更小的数据类型也足够了。
arange
和 linspace
函数可用于生成一个数值数组。数值从区间为 \([start,stop)\) 中选择,一般从 start
开始,到 stop
结束,在这个区间内生成一系列值。
arange
函数的常见形式:
arange(stop)
arange(start, stop)
arange(start, stop, step)
其中,step
用于指定数值之间的间隔,默认为 1。
# 以下两种方式等效
-np.arange(10)
-np.arange(stop=10)
-
linspace
函数生成 num
个均匀间隔的数值,也就是创建一个等差数列。
常见形式:linspace(start, stop, num)
。
# 生成在 1 和 5 之间 5 个均匀间隔的数组
-a = np.linspace(1,5,5)
-a
-
np.ones(shape)
生成 shape
大小的、全为 1 数组。例如,生成 \(3 \times 3 \times 6\) 的高维数组。
np.ones((2,3,4), dtype=np.float32)
-
如果已经有一个多维数组 a
,我们想根据这个数组 a
的形状生成一个全为 1 的数组:
np.ones_like(a)
-
np.zeros()
与 np.ones()
类似。np.zeros(shape)
生成 shape
大小的、全为 0 的数组。
np.zeros((2,3,4))
-
如果已经有一个多维数组 a
,我们想根据这个数组 a
的形状生成一个全为 0 的数组:
np.zeros_like(a)
-
np.full(shape,val)
生成 shape
大小的、全为 val
的数组,即数组中每个元素值都是 val
。
np.full((2,3,4), 6)
-
根据数组 a
的形状生成一个数组,元素值全为 val
:
np.full_like(a, 6)
-
直接打印一个 ndarray
可以看到它的值、dtype
等属性。
ar = np.array([[1,1,2,3,],
- [4,5,6,7],
- [8,9,10,11]])
-ar
-
或者打印某些具体的属性。
-ndim:多维数组的秩,或者说轴的数量,或者说数组有多少维度
ar.ndim
-
数组的尺度
ar.shape
-
数组中元素的个数
ar.size
-
元素的数据类型
ar.dtype
-
每个元素的大小,以字节(Byte)为单位
ar.itemsize
-
另外,我们经常要对数据进行一些变换。
-reshape()
函数
reshape(shape)
函数,不改变数组的元素,根据 shape
形状,生成一个新的数组。
ar.reshape((2,6))
-
flatten()
函数
flatten()
函数,对数组进行降维,将高维数组压缩成一个一维数组。
ar.flatten()
-
resize()
函数
resize(shape)
函数,返回一个 shape
形状的数组,功能与 reshape()
函数一致,但是修改原数组。
提示:当新数组可容纳数据少于原数据,按照原数据选择前 shape
个数据;如果多于,则新数组会按照原数组中的数据顺序进行填补。
ar_new = np.resize(ar, (2, 5))
-ar_new
-
ar_new = np.resize(ar, (3, 5))
-ar_new
-
astype(new_type)
函数,对数组的数据类型进行类型变化,基于对原始数据的拷贝创建一个新的数组。比如,将 np.int
类型元素修改为 np.float64
类型:
new_ar = ar.astype(np.float64)
-new_ar
-
np.concatenate()
将两个或者多个数组合并成一个新数组。
b = np.linspace(1,9,7)
-
-c = np.concatenate((a,b)) #将 a,b 两个数组合并成为 c
-c
-
列表作为 Python 中原始的数据类型,运算速度慢于 NumPy。如果需要与原生 Python 语言相适配,需做转换:
-ar.tolist()
-
Python 语言其实并不是为科学计算而设计的,到了 2000 年左右,Python 在科学计算领域变得越来越受欢迎,但缺乏一个高效的数组处理工具。Python 的列表(list)虽然灵活,但在处理大型数据集时性能不佳。
-NumPy 并不是第一个 Python 科学计算库,它的前身有 Numeric、Numarray 等,并借鉴 Fortran、MATLAB、和 S 语言了优点。经过了一系列的演化发展,Travis Oliphant 在 2005 年创建了 NumPy 项目,并在 2006 年发布了 NumPy 1.0。NumPy 的目标是提供高性能的多维数组对象,以及用于数组操作的丰富函数库。NumPy 引入了 ndarray
这一核心数据结构。
自从 NumPy 项目创建以来,它已经成为 Python 科学计算生态系统中的核心组件。许多其他科学计算和数据分析库,如 SciPy、pandas 和 Matplotlib,都构建在 NumPy 之上。
-可以使用 conda
或者 pip
安装:
# Hide outputs
-!pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
-
:label:data-preprocessing
数据处理工作包括处理重复值、缺失值和异常值,生成新的列或者行等。
-# Hide outputs
-# Hide code
-import os
+import os
import urllib.request
import zipfile
import pandas as pd
-folder_path = os.path.join(os.getcwd(), "./data/pwt")
+folder_path = os.path.join(os.getcwd(), "../data/pwt")
download_url = "https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip"
file_name = download_url.split("/")[-1]
if not os.path.exists(folder_path):
@@ -425,13 +427,11 @@ 数据处理
-文件夹不存在,已创建。
-
-
-数据已下载并解压缩。
+文件夹已存在,无需操作。
+
处理重复值#
diff --git a/docs/ch-pandas/dataframe-groupby.html b/docs/ch-pandas/dataframe-groupby.html
index 32372d2..6f2c6f5 100644
--- a/docs/ch-pandas/dataframe-groupby.html
+++ b/docs/ch-pandas/dataframe-groupby.html
@@ -391,7 +391,6 @@ Contents
分组汇总#
-:label:dataframe-groupby
实际的数据分析中,经常需要对某一类数据进行统计分析。比如,假如我们拥有全国所有人的身高和体重数据,我们想按照省份分组,统计每个省的平均身高和平均体重,这时候就需要使用分组操作。pandas 提供了 groupby
函数进行类似的分组汇总操作。:numref:groupby-img
计算平均身高的分组汇总流程,主要包括两部分:分组与汇总。其中分组阶段将同一类的内容归结到相同的组中;汇总阶段将所关心的数据进行计算,比如求和、求平均等。
按哪些字段进行分组,这些字段又被成为 ** 分组变量 **。对其他字段进行汇总,其他汇总字段被成为 ** 汇总变量 **。对汇总变量进行计算,被称为 ** 汇总统计量 **。
diff --git a/docs/ch-pandas/dataframe-merge-concat.html b/docs/ch-pandas/dataframe-merge-concat.html
index d9c3f41..0803bb5 100644
--- a/docs/ch-pandas/dataframe-merge-concat.html
+++ b/docs/ch-pandas/dataframe-merge-concat.html
@@ -393,14 +393,10 @@ Contents
多表操作#
-:label:dataframe-merge-concat
之前的操作主要在单个 DataFrame
,实际上,我们经常需要对多个 DataFrame
联合起来进行分析。pandas 提供了多 DataFrame
之间的合并和连接的操作,分别是 merge()
和 concat()
函数。比如,我们可以将两个 DataFrame
合并成一个,且保留所有的列。
merge#
pandas 的 merge
操作可以合并两个 DataFrame
(或者称为表) ,类似于 SQL 中的 JOIN 操作。 我们可以想象成:一个大表被拆分成两个小表,两个小表都包含一些同样的数据。现在我们需要把两个小表合并,生成一个大表,大表包含了两个小表的字段。
-
-:width:800px
-:label:merge-img
@@ -1113,14 +1109,18 @@
concat
案例:学生成绩#
我们使用一个学生成绩的案例来演示如何对两个 DataFrame
进行 merge
。
-
+
+
+
+Show code cell content
+
+
-# Hide outputs
-import urllib.request
+
diff --git a/docs/ch-pandas/dataframe-slicing.html b/docs/ch-pandas/dataframe-slicing.html
index b48138c..0e47c89 100644
--- a/docs/ch-pandas/dataframe-slicing.html
+++ b/docs/ch-pandas/dataframe-slicing.html
@@ -391,18 +391,20 @@ Contents
数据切片#
-:label:dataframe-slicing
实际中,我们常常不是分析整个数据,而是数据中的部分子集。如何根据特定的条件获得所需要的数据是本节的主要内容。
-
+
+
+
+Show code cell content
+
+
-# Hide outputs
-# Hide code
-import os
+import os
import urllib.request
import zipfile
import pandas as pd
-folder_path = os.path.join(os.getcwd(), "./data/pwt")
+folder_path = os.path.join(os.getcwd(), "../data/pwt")
download_url = "https://www.rug.nl/ggdc/docs/pwt70_06032011version.zip"
file_name = download_url.split("/")[-1]
if not os.path.exists(folder_path):
@@ -428,6 +430,7 @@ 数据切片
主要方法#
diff --git a/docs/ch-pandas/series-dataframe.html b/docs/ch-pandas/series-dataframe.html
index 8db64e0..2d77ad1 100644
--- a/docs/ch-pandas/series-dataframe.html
+++ b/docs/ch-pandas/series-dataframe.html
@@ -392,13 +392,10 @@ Contents
Series 与 DataFrame#
-:label:series-dataframe
pandas 的核心数据结构有两个: Series 和 DataFrame。
-# Hide outputs
-# Hide code
-import pandas as pd
+import pandas as pd
@@ -576,13 +573,18 @@ 创建 DataFrame
案例:PWT#
PWT 是一个经济学数据库,用于比较国家和地区之间的宏观经济数据,该数据集包含了各种宏观经济指标,如国内生产总值(GDP)、人均收入、劳动力和资本等因素,以及价格水平、汇率等信息。我们先下载,并使用 pandas 简单探索该数据集。
-