{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(content:PandasvsExcel)=\n",
"\n",
"# Pandas 对比 Excel\n",
"\n",
"> 为了方便长期使用 Excel 的用户转到 Pandas,我将结合官方文档对部分操作进行对比\n",
"\n",
"```{admonition} 在线刷题\n",
":class: seealso\n",
"\n",
"检查 or 强化 `Pandas` 数据分析操作?👉在线体验「Pandas进阶修炼300题」 \n",
"```\n",
"\n",
"\n",
"## 数据结构\n",
"\n",
"### 通用术语对比\n",
"\n",
"\n",
"\n",
"| pandas | Excel |\n",
"| :-----------: | :------: |\n",
"| `DataFrame` | 工作表 |\n",
"| `Series` | 列 |\n",
"| `Index` | 索引 |\n",
"| row | 行 |\n",
"| `NaN` | 空值 |\n",
"\n",
"### DataFrame\n",
"\n",
"`pandas` 中的 `dataframe` 类似于`Excel` 工作表。虽然一个 `Excel` 工作簿可以包含多个工作表,但通常情况下 `pandas.DataFrame`是独立存在的。\n",
"\n",
"### Series\n",
"\n",
"`Series`是表示 `DataFrame`一列的数据结构。使用 `Series` 类似于引用电子表格中的一列。\n",
"\n",
"### Index\n",
"\n",
"每个 `DataFrame` 和 `Series` 都有一个 `Index`,它是数据行的标签。在`pandas`中,如果没有指定索引,则默认使用RangeIndex(第一行= 0,第二行= 1,等等),类似于电子表格中的行标题/数字。\n",
"\n",
"\n",
"\n",
"在 `pandas` 中,索引可以设置为一个(或多个)惟一值,这就像在工作表中有一列用作行标识符一样。与大多数电子表格不同,这些Index值实际上可以用来引用行。(注意,这可以在Excel的结构化引用中完成。)例如,在电子表格中,您可以引用第一行为 `A1:Z1`,而在 pandas 中,您可以使用`population .loc['Chicago']`。\n",
"\n",
"\n",
"\n",
"## 常见操作对比\n",
"\n",
"为了更方便介绍 Pandas 相关功能,方便长期使用 Excel 进行数据分析的用户学习,下面是常见操作的 Excel 与 Pandas 实现对比。\n",
"\n",
"### 1 - 数据读取\n",
"\n",
"#### `Excel`\n",
"\n",
"Excel读取本地数据需要打开目标文件夹选中该文件并打开\n",
"\n",
"```{figure} gif/读取数据.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
" #### `Pandas`\n",
"\n",
"\n",
"\n",
"Pandas支持读取本地Excel、txt文件,也支持从网页直接读取表格数据,只用一行代码即可,例如读取上述本地Excel数据可以使用`pd.read_excel(\"示例数据.xlsx\")`"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 创建时间 \n",
" 地址 \n",
" 岗位 \n",
" 学历 \n",
" 技能要求 \n",
" 工作经验 \n",
" 薪资水平 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2020-03-16 12:28:11 \n",
" 广州 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hive', '数据挖掘', '数据分析'] \n",
" 3-5年 \n",
" 20000.0 \n",
" \n",
" \n",
" 1 \n",
" 2020-03-16 12:39:03 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '数据库'] \n",
" 1-3年 \n",
" 13000.0 \n",
" \n",
" \n",
" 2 \n",
" 2020-03-16 12:01:37 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '商业'] \n",
" 应届毕业生 \n",
" 8000.0 \n",
" \n",
" \n",
" 3 \n",
" 2020-03-16 11:19:51 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['SQL', '数据分析', '数据库'] \n",
" 3-5年 \n",
" 20000.0 \n",
" \n",
" \n",
" 4 \n",
" 2020-03-16 11:18:49 \n",
" 广州 \n",
" 数据分析 \n",
" 大专 \n",
" ['数据分析'] \n",
" 1-3年 \n",
" 8000.0 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 820 \n",
" 2020-03-16 11:20:44 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 1年以下 \n",
" 11500.0 \n",
" \n",
" \n",
" 821 \n",
" 2020-03-16 11:20:42 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" [] \n",
" 应届毕业生 \n",
" 4500.0 \n",
" \n",
" \n",
" 822 \n",
" 2020-03-16 10:33:46 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" ['BI', '数据分析', 'SQL', '数据库'] \n",
" 3-5年 \n",
" 16500.0 \n",
" \n",
" \n",
" 823 \n",
" 2020-03-16 11:20:43 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" [] \n",
" 不限 \n",
" 11500.0 \n",
" \n",
" \n",
" 824 \n",
" 2020-03-16 10:37:24 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 不限 \n",
" 3000.0 \n",
" \n",
" \n",
"
\n",
"
825 rows × 7 columns
\n",
"
"
],
"text/plain": [
" 创建时间 地址 岗位 学历 技能要求 工作经验 \\\n",
"0 2020-03-16 12:28:11 广州 数据开发 本科 ['Hive', '数据挖掘', '数据分析'] 3-5年 \n",
"1 2020-03-16 12:39:03 广州 数据分析 本科 ['数据分析', '数据库'] 1-3年 \n",
"2 2020-03-16 12:01:37 广州 数据分析 本科 ['数据分析', '商业'] 应届毕业生 \n",
"3 2020-03-16 11:19:51 广州 数据分析 本科 ['SQL', '数据分析', '数据库'] 3-5年 \n",
"4 2020-03-16 11:18:49 广州 数据分析 大专 ['数据分析'] 1-3年 \n",
".. ... .. ... .. ... ... \n",
"820 2020-03-16 11:20:44 深圳 数据分析 本科 [] 1年以下 \n",
"821 2020-03-16 11:20:42 深圳 数据开发 本科 [] 应届毕业生 \n",
"822 2020-03-16 10:33:46 深圳 数据分析 本科 ['BI', '数据分析', 'SQL', '数据库'] 3-5年 \n",
"823 2020-03-16 11:20:43 深圳 数据开发 本科 [] 不限 \n",
"824 2020-03-16 10:37:24 深圳 数据分析 本科 [] 不限 \n",
"\n",
" 薪资水平 \n",
"0 20000.0 \n",
"1 13000.0 \n",
"2 8000.0 \n",
"3 20000.0 \n",
"4 8000.0 \n",
".. ... \n",
"820 11500.0 \n",
"821 4500.0 \n",
"822 16500.0 \n",
"823 11500.0 \n",
"824 3000.0 \n",
"\n",
"[825 rows x 7 columns]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"pd.read_excel(\"示例数据.xlsx\") #将示例数据.xlsx放在该Notebook同一文件夹下"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2 - 数据生成\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"以生成**10\\*2的0—1均匀分布随机数矩阵**为例,在Excel中需要使用`rand()`函数生成随机数,并手动拉取指定范围\n",
"\n",
"```{figure} gif/生成数据.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"\n",
"在Pandas中可以结合NumPy生成由指定随机数(均匀分布、正态分布等)生成的矩阵,例如同样生成**10\\*2的0—1均匀分布随机数矩阵**为,使用一行代码即可:`pd.DataFrame(np.random.rand(10,2))`"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.731228 \n",
" 0.311061 \n",
" \n",
" \n",
" 1 \n",
" 0.400904 \n",
" 0.592247 \n",
" \n",
" \n",
" 2 \n",
" 0.531014 \n",
" 0.797781 \n",
" \n",
" \n",
" 3 \n",
" 0.267304 \n",
" 0.361800 \n",
" \n",
" \n",
" 4 \n",
" 0.454464 \n",
" 0.051818 \n",
" \n",
" \n",
" 5 \n",
" 0.608874 \n",
" 0.832793 \n",
" \n",
" \n",
" 6 \n",
" 0.617377 \n",
" 0.556913 \n",
" \n",
" \n",
" 7 \n",
" 0.345005 \n",
" 0.146446 \n",
" \n",
" \n",
" 8 \n",
" 0.095227 \n",
" 0.676246 \n",
" \n",
" \n",
" 9 \n",
" 0.913447 \n",
" 0.796782 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1\n",
"0 0.731228 0.311061\n",
"1 0.400904 0.592247\n",
"2 0.531014 0.797781\n",
"3 0.267304 0.361800\n",
"4 0.454464 0.051818\n",
"5 0.608874 0.832793\n",
"6 0.617377 0.556913\n",
"7 0.345005 0.146446\n",
"8 0.095227 0.676246\n",
"9 0.913447 0.796782"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"pd.DataFrame(np.random.rand(10,2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3 - 数据存储\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"在Excel中需要点击保存并设置格式/文件名\n",
"\n",
"```{figure} gif/保存数据.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在Pandas中可以使用`pd.to_excel(\"filename.xlsx\")`来将当前工作表格保存至当前目录下,当然也可以使用`to_csv`保存为csv等其他格式,也可以使用绝对路径来指定保存位置"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# data.to_excel(\"测试数据.xlsx\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4 - 数据筛选\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"使用我们之前的示例数据,在Excel中筛选出`薪资大于5000`的数据步骤如下\n",
"\n",
"\n",
"```{figure} gif/数据筛选.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在Pandas中,可直接对数据框进行条件筛选,例如同样进行单个条件(薪资大于5000)的筛选可以使用`df[df['薪资水平']>5000]`,如果使用多个条件的筛选只需要使用`&`(并)与`|`(或)操作符实现"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 创建时间 \n",
" 地址 \n",
" 岗位 \n",
" 学历 \n",
" 技能要求 \n",
" 工作经验 \n",
" 薪资水平 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2020-03-16 12:28:11 \n",
" 广州 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hive', '数据挖掘', '数据分析'] \n",
" 3-5年 \n",
" 20000.0 \n",
" \n",
" \n",
" 1 \n",
" 2020-03-16 12:39:03 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '数据库'] \n",
" 1-3年 \n",
" 13000.0 \n",
" \n",
" \n",
" 2 \n",
" 2020-03-16 12:01:37 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '商业'] \n",
" 应届毕业生 \n",
" 8000.0 \n",
" \n",
" \n",
" 3 \n",
" 2020-03-16 11:19:51 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['SQL', '数据分析', '数据库'] \n",
" 3-5年 \n",
" 20000.0 \n",
" \n",
" \n",
" 4 \n",
" 2020-03-16 11:18:49 \n",
" 广州 \n",
" 数据分析 \n",
" 大专 \n",
" ['数据分析'] \n",
" 1-3年 \n",
" 8000.0 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 817 \n",
" 2020-03-16 11:20:42 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 1-3年 \n",
" 11500.0 \n",
" \n",
" \n",
" 819 \n",
" 2020-03-16 11:20:44 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 1-3年 \n",
" 15000.0 \n",
" \n",
" \n",
" 820 \n",
" 2020-03-16 11:20:44 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 1年以下 \n",
" 11500.0 \n",
" \n",
" \n",
" 822 \n",
" 2020-03-16 10:33:46 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" ['BI', '数据分析', 'SQL', '数据库'] \n",
" 3-5年 \n",
" 16500.0 \n",
" \n",
" \n",
" 823 \n",
" 2020-03-16 11:20:43 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" [] \n",
" 不限 \n",
" 11500.0 \n",
" \n",
" \n",
"
\n",
"
776 rows × 7 columns
\n",
"
"
],
"text/plain": [
" 创建时间 地址 岗位 学历 技能要求 工作经验 \\\n",
"0 2020-03-16 12:28:11 广州 数据开发 本科 ['Hive', '数据挖掘', '数据分析'] 3-5年 \n",
"1 2020-03-16 12:39:03 广州 数据分析 本科 ['数据分析', '数据库'] 1-3年 \n",
"2 2020-03-16 12:01:37 广州 数据分析 本科 ['数据分析', '商业'] 应届毕业生 \n",
"3 2020-03-16 11:19:51 广州 数据分析 本科 ['SQL', '数据分析', '数据库'] 3-5年 \n",
"4 2020-03-16 11:18:49 广州 数据分析 大专 ['数据分析'] 1-3年 \n",
".. ... .. ... .. ... ... \n",
"817 2020-03-16 11:20:42 深圳 数据分析 本科 [] 1-3年 \n",
"819 2020-03-16 11:20:44 深圳 数据分析 本科 [] 1-3年 \n",
"820 2020-03-16 11:20:44 深圳 数据分析 本科 [] 1年以下 \n",
"822 2020-03-16 10:33:46 深圳 数据分析 本科 ['BI', '数据分析', 'SQL', '数据库'] 3-5年 \n",
"823 2020-03-16 11:20:43 深圳 数据开发 本科 [] 不限 \n",
"\n",
" 薪资水平 \n",
"0 20000.0 \n",
"1 13000.0 \n",
"2 8000.0 \n",
"3 20000.0 \n",
"4 8000.0 \n",
".. ... \n",
"817 11500.0 \n",
"819 15000.0 \n",
"820 11500.0 \n",
"822 16500.0 \n",
"823 11500.0 \n",
"\n",
"[776 rows x 7 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_excel(\"示例数据.xlsx\")\n",
"df[df['薪资水平']>5000]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5 - 数据插入\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中我们可以将光标放在指定位置并右键增加一行/列,当然也可以在添加时对数据进行一些计算,比如我们就可以使用IF函数(`=IF(G2>10000,\"高\",\"低\")`),将薪资大于10000的设为高,低于10000的设为低,**添加一列**在最后\n",
"\n",
"```{figure} gif/插入数据.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在 pandas 中,如果不借助自定义函数的话,我们可以使用`cut`方法来实现同样操作"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"bins = [0,10000,max(df['薪资水平'])]\n",
"group_names = ['低','高']\n",
"df['new_col'] = pd.cut(df['薪资水平'], bins, labels=group_names)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 6 - 数据删除\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel删除数据十分简单,找到需要删除的数据**右键删除**即可,比如删除刚刚生成的最后一列\n",
"\n",
"```{figure} gif/数据删除.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"\n",
"\n",
"#### `Pandas`\n",
"在pandas中删除数据也很简单,比如删除最后一列使用`del df['new_col']`即可\n",
"\n",
"### 7 - 数据排序\n",
" \n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中可以点击排序按钮进行排序,例如将示例数据按照薪资从高到低进行排序可以按照下面的步骤进行\n",
"\n",
"```{figure} gif/数据排序.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在pandas中可以使用`sort_values`进行排序,使用`ascending`来控制升降序,例如将示例数据按照薪资从高到低进行排序可以使用`df.sort_values(\"薪资水平\",ascending=False,inplace=True)`"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 创建时间 \n",
" 地址 \n",
" 岗位 \n",
" 学历 \n",
" 技能要求 \n",
" 工作经验 \n",
" 薪资水平 \n",
" new_col \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2020-03-16 12:28:11 \n",
" 广州 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hive', '数据挖掘', '数据分析'] \n",
" 3-5年 \n",
" 20000.0 \n",
" 高 \n",
" \n",
" \n",
" 1 \n",
" 2020-03-16 12:39:03 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '数据库'] \n",
" 1-3年 \n",
" 13000.0 \n",
" 高 \n",
" \n",
" \n",
" 2 \n",
" 2020-03-16 12:01:37 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '商业'] \n",
" 应届毕业生 \n",
" 8000.0 \n",
" 低 \n",
" \n",
" \n",
" 3 \n",
" 2020-03-16 11:19:51 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['SQL', '数据分析', '数据库'] \n",
" 3-5年 \n",
" 20000.0 \n",
" 高 \n",
" \n",
" \n",
" 4 \n",
" 2020-03-16 11:18:49 \n",
" 广州 \n",
" 数据分析 \n",
" 大专 \n",
" ['数据分析'] \n",
" 1-3年 \n",
" 8000.0 \n",
" 低 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 820 \n",
" 2020-03-16 11:20:44 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 1年以下 \n",
" 11500.0 \n",
" 高 \n",
" \n",
" \n",
" 821 \n",
" 2020-03-16 11:20:42 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" [] \n",
" 应届毕业生 \n",
" 4500.0 \n",
" 低 \n",
" \n",
" \n",
" 822 \n",
" 2020-03-16 10:33:46 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" ['BI', '数据分析', 'SQL', '数据库'] \n",
" 3-5年 \n",
" 16500.0 \n",
" 高 \n",
" \n",
" \n",
" 823 \n",
" 2020-03-16 11:20:43 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" [] \n",
" 不限 \n",
" 11500.0 \n",
" 高 \n",
" \n",
" \n",
" 824 \n",
" 2020-03-16 10:37:24 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 不限 \n",
" 3000.0 \n",
" 低 \n",
" \n",
" \n",
"
\n",
"
825 rows × 8 columns
\n",
"
"
],
"text/plain": [
" 创建时间 地址 岗位 学历 技能要求 工作经验 \\\n",
"0 2020-03-16 12:28:11 广州 数据开发 本科 ['Hive', '数据挖掘', '数据分析'] 3-5年 \n",
"1 2020-03-16 12:39:03 广州 数据分析 本科 ['数据分析', '数据库'] 1-3年 \n",
"2 2020-03-16 12:01:37 广州 数据分析 本科 ['数据分析', '商业'] 应届毕业生 \n",
"3 2020-03-16 11:19:51 广州 数据分析 本科 ['SQL', '数据分析', '数据库'] 3-5年 \n",
"4 2020-03-16 11:18:49 广州 数据分析 大专 ['数据分析'] 1-3年 \n",
".. ... .. ... .. ... ... \n",
"820 2020-03-16 11:20:44 深圳 数据分析 本科 [] 1年以下 \n",
"821 2020-03-16 11:20:42 深圳 数据开发 本科 [] 应届毕业生 \n",
"822 2020-03-16 10:33:46 深圳 数据分析 本科 ['BI', '数据分析', 'SQL', '数据库'] 3-5年 \n",
"823 2020-03-16 11:20:43 深圳 数据开发 本科 [] 不限 \n",
"824 2020-03-16 10:37:24 深圳 数据分析 本科 [] 不限 \n",
"\n",
" 薪资水平 new_col \n",
"0 20000.0 高 \n",
"1 13000.0 高 \n",
"2 8000.0 低 \n",
"3 20000.0 高 \n",
"4 8000.0 低 \n",
".. ... ... \n",
"820 11500.0 高 \n",
"821 4500.0 低 \n",
"822 16500.0 高 \n",
"823 11500.0 高 \n",
"824 3000.0 低 \n",
"\n",
"[825 rows x 8 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1 = df\n",
"df1.sort_values(\"薪资水平\",ascending=False)\n",
"df1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 8 - 缺失值处理\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中可以按照**查找—>定位条件—>空值**来快速定位数据中的空值,接着可以自己定义缺失值的填充方式,比如将缺失值用上一个数据进行填充\n",
"\n",
"```{figure} gif/缺失值处理.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在pandas中可以使用 `data.isnull().sum()` 来检查缺失值,之后可以使用多种方法来填充或者删除缺失值,比如我们可以使用`df = df.fillna(axis=0,method='ffill')` 来横向/纵向用缺失值前面的值替换缺失值"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"创建时间 0\n",
"地址 0\n",
"岗位 0\n",
"学历 0\n",
"技能要求 0\n",
"工作经验 0\n",
"薪资水平 2\n",
"new_col 2\n",
"dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 9 - 数据去重\n",
"\n",
"#### `Excel`\n",
"\n",
"在Excel中可以通过点击**数据—>删除重复值**按钮并选择需要去重的列即可,例如对示例数据按照创建时间列进行去重,可以发现去掉了196 个重复值,保留了 629 个唯一值。\n",
"\n",
"```{figure} gif/数据去重.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"#### `Pandas`\n",
"\n",
"\n",
"\n",
"在pandas中可以使用`drop_duplicates`来对数据进行去重,并且可以指定列以及保留顺序,例如对示例数据按照创建时间列进行去重`df.drop_duplicates(['创建时间'],inplace=True)`,可以发现和Excel处理的结果一致,保留了 629 个唯一值。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 创建时间 \n",
" 地址 \n",
" 岗位 \n",
" 学历 \n",
" 技能要求 \n",
" 工作经验 \n",
" 薪资水平 \n",
" new_col \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2020-03-16 12:28:11 \n",
" 广州 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hive', '数据挖掘', '数据分析'] \n",
" 3-5年 \n",
" 20000.0 \n",
" 高 \n",
" \n",
" \n",
" 1 \n",
" 2020-03-16 12:39:03 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '数据库'] \n",
" 1-3年 \n",
" 13000.0 \n",
" 高 \n",
" \n",
" \n",
" 2 \n",
" 2020-03-16 12:01:37 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', '商业'] \n",
" 应届毕业生 \n",
" 8000.0 \n",
" 低 \n",
" \n",
" \n",
" 3 \n",
" 2020-03-16 11:19:51 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['SQL', '数据分析', '数据库'] \n",
" 3-5年 \n",
" 20000.0 \n",
" 高 \n",
" \n",
" \n",
" 4 \n",
" 2020-03-16 11:18:49 \n",
" 广州 \n",
" 数据分析 \n",
" 大专 \n",
" ['数据分析'] \n",
" 1-3年 \n",
" 8000.0 \n",
" 低 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 811 \n",
" 2020-03-16 11:03:17 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hive', '数据分析', '数据仓库', '信息安全'] \n",
" 3-5年 \n",
" 37000.0 \n",
" 高 \n",
" \n",
" \n",
" 812 \n",
" 2020-03-16 11:03:03 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" ['数据挖掘', '数据分析'] \n",
" 不限 \n",
" 30000.0 \n",
" 高 \n",
" \n",
" \n",
" 815 \n",
" 2020-03-16 11:00:56 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" ['BI', '数据分析', 'SQL', '数据库'] \n",
" 5-10年 \n",
" 45000.0 \n",
" 高 \n",
" \n",
" \n",
" 817 \n",
" 2020-03-16 11:20:42 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 1-3年 \n",
" 11500.0 \n",
" 高 \n",
" \n",
" \n",
" 824 \n",
" 2020-03-16 10:37:24 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 不限 \n",
" 3000.0 \n",
" 低 \n",
" \n",
" \n",
"
\n",
"
629 rows × 8 columns
\n",
"
"
],
"text/plain": [
" 创建时间 地址 岗位 学历 技能要求 \\\n",
"0 2020-03-16 12:28:11 广州 数据开发 本科 ['Hive', '数据挖掘', '数据分析'] \n",
"1 2020-03-16 12:39:03 广州 数据分析 本科 ['数据分析', '数据库'] \n",
"2 2020-03-16 12:01:37 广州 数据分析 本科 ['数据分析', '商业'] \n",
"3 2020-03-16 11:19:51 广州 数据分析 本科 ['SQL', '数据分析', '数据库'] \n",
"4 2020-03-16 11:18:49 广州 数据分析 大专 ['数据分析'] \n",
".. ... .. ... .. ... \n",
"811 2020-03-16 11:03:17 深圳 数据开发 本科 ['Hive', '数据分析', '数据仓库', '信息安全'] \n",
"812 2020-03-16 11:03:03 深圳 数据开发 本科 ['数据挖掘', '数据分析'] \n",
"815 2020-03-16 11:00:56 深圳 数据分析 本科 ['BI', '数据分析', 'SQL', '数据库'] \n",
"817 2020-03-16 11:20:42 深圳 数据分析 本科 [] \n",
"824 2020-03-16 10:37:24 深圳 数据分析 本科 [] \n",
"\n",
" 工作经验 薪资水平 new_col \n",
"0 3-5年 20000.0 高 \n",
"1 1-3年 13000.0 高 \n",
"2 应届毕业生 8000.0 低 \n",
"3 3-5年 20000.0 高 \n",
"4 1-3年 8000.0 低 \n",
".. ... ... ... \n",
"811 3-5年 37000.0 高 \n",
"812 不限 30000.0 高 \n",
"815 5-10年 45000.0 高 \n",
"817 1-3年 11500.0 高 \n",
"824 不限 3000.0 低 \n",
"\n",
"[629 rows x 8 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.drop_duplicates(['创建时间'],inplace=True)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 10 - 格式修改\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"在Excel中可以选中需要转换格式的数据之后**右键—>修改单元格格式**来选择我们需要的格式\n",
"\n",
"```{figure} gif/格式转换.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在Pandas中没有一个固定修改格式的方法,不同的数据格式有着不同的修改方法,比如类似Excel中将创建时间修改为年-月-日可以使用`df['创建时间'] = df['创建时间'].dt.strftime('%Y-%m-%d')`"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df1 = df\n",
"df1['创建时间'] = df1['创建时间'].dt.strftime('%Y-%m-%d')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 11 - 数据交换\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中交换数据是很常用的操作,以交换示例数据中地址与岗位两列为例,可以选中地址列,按住shift键并拖动边缘至下一列松开即可\n",
"\n",
"```{figure} gif/数据交换.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在 pandas 中交换两列也有很多方法,以交换示例数据中地址与岗位两列为例,可以通过修改列号来实现"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"cols = df.columns[[0,2,1,3,4,5,6]]\n",
"df1 = df[cols]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 12 - 数据合并\n",
"\n",
"\n",
"#### Excel\n",
"\n",
"在Excel中可以使用公式也可以使用Ctrl+E快捷键完成多列合并,以公式为例,合并示例数据中的地址+岗位列步骤如下\n",
"\n",
"```{figure} gif/数据合并.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"#### `Pandas`\n",
"\n",
"在Pandas中合并多列比较简单,类似于之前的数据插入操作,例如合并示例数据中的地址+岗位列使用`df['合并列'] = df['地址'] + df['岗位']`"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"df['合并列'] = df['地址'] + df['岗位']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 13 - 数据拆分\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"在Excel中可以通过点击**数据—>分列**并按照提示的选项设置相关参数完成分列,但是由于该列含有[]等特殊字符,所以需要先使用查找替换去掉\n",
"\n",
"\n",
"```{figure} gif/数据拆分.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"\n",
"\n",
"在Pandas中可以使用`.split`来完成分列,但是在分列完毕后需要使用 `merge` 来将分列完的数据添加至原DataFrame,对于分列完的数据含有`[]`字符,我们可以使用正则或者字符串`lstrip`方法进行处理,但因不是pandas特性,此处不再展开。"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 2 \n",
" 3 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" ['Hive' \n",
" '数据挖掘' \n",
" '数据分析'] \n",
" None \n",
" \n",
" \n",
" 1 \n",
" ['数据分析' \n",
" '数据库'] \n",
" None \n",
" None \n",
" \n",
" \n",
" 2 \n",
" ['数据分析' \n",
" '商业'] \n",
" None \n",
" None \n",
" \n",
" \n",
" 3 \n",
" ['SQL' \n",
" '数据分析' \n",
" '数据库'] \n",
" None \n",
" \n",
" \n",
" 4 \n",
" ['数据分析'] \n",
" None \n",
" None \n",
" None \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 811 \n",
" ['Hive' \n",
" '数据分析' \n",
" '数据仓库' \n",
" '信息安全'] \n",
" \n",
" \n",
" 812 \n",
" ['数据挖掘' \n",
" '数据分析'] \n",
" None \n",
" None \n",
" \n",
" \n",
" 815 \n",
" ['BI' \n",
" '数据分析' \n",
" 'SQL' \n",
" '数据库'] \n",
" \n",
" \n",
" 817 \n",
" [] \n",
" None \n",
" None \n",
" None \n",
" \n",
" \n",
" 824 \n",
" [] \n",
" None \n",
" None \n",
" None \n",
" \n",
" \n",
"
\n",
"
629 rows × 4 columns
\n",
"
"
],
"text/plain": [
" 0 1 2 3\n",
"0 ['Hive' '数据挖掘' '数据分析'] None\n",
"1 ['数据分析' '数据库'] None None\n",
"2 ['数据分析' '商业'] None None\n",
"3 ['SQL' '数据分析' '数据库'] None\n",
"4 ['数据分析'] None None None\n",
".. ... ... ... ...\n",
"811 ['Hive' '数据分析' '数据仓库' '信息安全']\n",
"812 ['数据挖掘' '数据分析'] None None\n",
"815 ['BI' '数据分析' 'SQL' '数据库']\n",
"817 [] None None None\n",
"824 [] None None None\n",
"\n",
"[629 rows x 4 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['技能要求'].str.split(',',expand=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 14 - 数据分组\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中对数据进行分组计算需要先对需要分组的字段进行排序,之后可以通过点击分类汇总并设置相关参数完成,比如对示例数据的学历进行分组并求不同学历的平均薪资\n",
"\n",
"```{figure} gif/数据分组.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"#### `Pandas`\n",
"\n",
"\n",
"在Pandas中对数据进行分组计算可以使用groupby轻松搞定,比如使用`df.groupby(\"学历\").mean()`一行代码即可对示例数据的学历进行分组并求不同学历的平均薪资,结果与Excel一致\n",
"\n",
"\n",
"### 15 - 数据计算\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中有很多计算相关的公式,比如可以使用`COUNTIFS`来统计薪资大于10000的岗位数量有518个\n",
"\n",
"```{figure} gif/生成数据.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"#### `Pandas`\n",
"\n",
"在Pandas中可以直接使用类似数据筛选的方法来统计薪资大于10000的岗位数量`len(df[df[\"薪资水平\"]>10000])`"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"518"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df[df[\"薪资水平\"]>10000])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 16 - 数据统计\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中有很多统计相关的公式,也有现成的分析工具,比如对薪资水平列进行描述性统计分析,可以通过添加工具库之后点击数据分析按钮并设置相关参数\n",
"\n",
"```{figure} gif/数据统计.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在pandas中也有现成的函数describe快速完成对数据的描述性统计,比如使用`df[\"薪资水平\"].describe()`即可得到薪资列的描述性统计结果"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 627.000000\n",
"mean 19019.138756\n",
"std 9696.823558\n",
"min 1000.000000\n",
"25% 12500.000000\n",
"50% 17500.000000\n",
"75% 25000.000000\n",
"max 60000.000000\n",
"Name: 薪资水平, dtype: float64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"薪资水平\"].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 17 - 数据可视化\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"在Excel中可以通过点击插入并选择图表来快速完成对数据的可视化,比如制作薪资的直方图,并且有很多样式可以直接使用\n",
"\n",
"```{figure} gif/数据可视化.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"#### `Pandas`\n",
"\n",
"\n",
"在Pandas中也支持直接对数据绘制不同可视化图表,例如直方图,可以使用plot或者直接使用hist来制作df[\"薪资水平\"].hist()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/Users/liuzaoqi/Desktop/zaoqi-book/_build/jupyter_execute/doc/chapter0/Pandas对比Excel_29_1.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df[\"薪资水平\"].hist()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 18 - 数据抽样\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"在Excel中抽样可以使用公式也可以使用分析工具库中的抽样,但是仅支持对**数值型**的列抽样,比如随机抽20个示例数据中薪资的样本\n",
"\n",
"```{figure} gif/数据抽样.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在pandas中有抽样函数sample可以直接抽样,并且支持任意格式的数据抽样,可以按照数量/比例抽样,比如随机抽20个示例数据中的样本"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 创建时间 \n",
" 地址 \n",
" 岗位 \n",
" 学历 \n",
" 技能要求 \n",
" 工作经验 \n",
" 薪资水平 \n",
" new_col \n",
" 合并列 \n",
" \n",
" \n",
" \n",
" \n",
" 502 \n",
" 2020-03-16 \n",
" 上海 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据库', 'SQL', '数据分析'] \n",
" 1-3年 \n",
" 14000.0 \n",
" 高 \n",
" 上海数据分析 \n",
" \n",
" \n",
" 346 \n",
" 2020-03-16 \n",
" 北京 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', 'BI', 'SQL', '数据库'] \n",
" 3-5年 \n",
" 27500.0 \n",
" 高 \n",
" 北京数据分析 \n",
" \n",
" \n",
" 232 \n",
" 2020-03-15 \n",
" 杭州 \n",
" 数据分析 \n",
" 本科 \n",
" ['BI', 'SQL'] \n",
" 3-5年 \n",
" 30000.0 \n",
" 高 \n",
" 杭州数据分析 \n",
" \n",
" \n",
" 46 \n",
" 2020-03-16 \n",
" 广州 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据运营', '数据分析', 'SQL', 'SPSS'] \n",
" 1-3年 \n",
" 10000.0 \n",
" 低 \n",
" 广州数据分析 \n",
" \n",
" \n",
" 253 \n",
" 2020-03-15 \n",
" 杭州 \n",
" 数据分析 \n",
" 大专 \n",
" ['BI', '数据分析', '数据运营', 'SPSS'] \n",
" 3-5年 \n",
" 30000.0 \n",
" 高 \n",
" 杭州数据分析 \n",
" \n",
" \n",
" 314 \n",
" 2020-03-16 \n",
" 北京 \n",
" 数据开发 \n",
" 本科 \n",
" ['数据挖掘'] \n",
" 5-10年 \n",
" 30000.0 \n",
" 高 \n",
" 北京数据开发 \n",
" \n",
" \n",
" 772 \n",
" 2020-03-13 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析', 'SQL'] \n",
" 5-10年 \n",
" 15000.0 \n",
" 高 \n",
" 深圳数据分析 \n",
" \n",
" \n",
" 420 \n",
" 2020-03-16 \n",
" 北京 \n",
" 数据分析 \n",
" 本科 \n",
" ['产品'] \n",
" 3-5年 \n",
" 16000.0 \n",
" 高 \n",
" 北京数据分析 \n",
" \n",
" \n",
" 572 \n",
" 2020-03-16 \n",
" 深圳 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hadoop', 'Spark'] \n",
" 1-3年 \n",
" 25000.0 \n",
" 高 \n",
" 深圳数据开发 \n",
" \n",
" \n",
" 156 \n",
" 2020-01-10 \n",
" 广州 \n",
" 数据开发 \n",
" 硕士 \n",
" ['算法', '数据挖掘', '数据分析'] \n",
" 1-3年 \n",
" 10500.0 \n",
" 高 \n",
" 广州数据开发 \n",
" \n",
" \n",
" 741 \n",
" 2020-03-16 \n",
" 深圳 \n",
" 保险 \n",
" 本科 \n",
" ['保险'] \n",
" 1年以下 \n",
" 15000.0 \n",
" 高 \n",
" 深圳保险 \n",
" \n",
" \n",
" 174 \n",
" 2020-03-16 \n",
" 杭州 \n",
" 数据开发 \n",
" 本科 \n",
" ['Hive', '数据挖掘', '数据分析', 'SQLServer'] \n",
" 1-3年 \n",
" 16000.0 \n",
" 高 \n",
" 杭州数据开发 \n",
" \n",
" \n",
" 27 \n",
" 2020-03-16 \n",
" 广州 \n",
" 运营 \n",
" 本科 \n",
" ['数据分析'] \n",
" 5-10年 \n",
" 25000.0 \n",
" 高 \n",
" 广州运营 \n",
" \n",
" \n",
" 625 \n",
" 2020-03-16 \n",
" 深圳 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据运营', '数据分析'] \n",
" 3-5年 \n",
" 18000.0 \n",
" 高 \n",
" 深圳数据分析 \n",
" \n",
" \n",
" 479 \n",
" 2020-03-16 \n",
" 上海 \n",
" 运营 \n",
" 本科 \n",
" ['数据分析', '游戏运营'] \n",
" 1-3年 \n",
" 12000.0 \n",
" 高 \n",
" 上海运营 \n",
" \n",
" \n",
" 328 \n",
" 2020-03-15 \n",
" 北京 \n",
" 数据分析 \n",
" 本科 \n",
" ['数据分析'] \n",
" 1-3年 \n",
" 22500.0 \n",
" 高 \n",
" 北京数据分析 \n",
" \n",
" \n",
" 786 \n",
" 2020-03-13 \n",
" 深圳 \n",
" 运营 \n",
" 本科 \n",
" ['数据分析', '游戏运营'] \n",
" 应届毕业生 \n",
" 8500.0 \n",
" 低 \n",
" 深圳运营 \n",
" \n",
" \n",
" 759 \n",
" 2020-03-03 \n",
" 深圳 \n",
" 人工智能 \n",
" 本科 \n",
" ['机器学习', '人工智能', '建模', '算法'] \n",
" 5-10年 \n",
" 60000.0 \n",
" 高 \n",
" 深圳人工智能 \n",
" \n",
" \n",
" 394 \n",
" 2020-03-16 \n",
" 北京 \n",
" 数据分析 \n",
" 本科 \n",
" ['BI'] \n",
" 3-5年 \n",
" 30000.0 \n",
" 高 \n",
" 北京数据分析 \n",
" \n",
" \n",
" 418 \n",
" 2020-03-16 \n",
" 北京 \n",
" 数据分析 \n",
" 本科 \n",
" [] \n",
" 3-5年 \n",
" 30000.0 \n",
" 高 \n",
" 北京数据分析 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 创建时间 地址 岗位 学历 技能要求 工作经验 \\\n",
"502 2020-03-16 上海 数据分析 本科 ['数据库', 'SQL', '数据分析'] 1-3年 \n",
"346 2020-03-16 北京 数据分析 本科 ['数据分析', 'BI', 'SQL', '数据库'] 3-5年 \n",
"232 2020-03-15 杭州 数据分析 本科 ['BI', 'SQL'] 3-5年 \n",
"46 2020-03-16 广州 数据分析 本科 ['数据运营', '数据分析', 'SQL', 'SPSS'] 1-3年 \n",
"253 2020-03-15 杭州 数据分析 大专 ['BI', '数据分析', '数据运营', 'SPSS'] 3-5年 \n",
"314 2020-03-16 北京 数据开发 本科 ['数据挖掘'] 5-10年 \n",
"772 2020-03-13 深圳 数据分析 本科 ['数据分析', 'SQL'] 5-10年 \n",
"420 2020-03-16 北京 数据分析 本科 ['产品'] 3-5年 \n",
"572 2020-03-16 深圳 数据开发 本科 ['Hadoop', 'Spark'] 1-3年 \n",
"156 2020-01-10 广州 数据开发 硕士 ['算法', '数据挖掘', '数据分析'] 1-3年 \n",
"741 2020-03-16 深圳 保险 本科 ['保险'] 1年以下 \n",
"174 2020-03-16 杭州 数据开发 本科 ['Hive', '数据挖掘', '数据分析', 'SQLServer'] 1-3年 \n",
"27 2020-03-16 广州 运营 本科 ['数据分析'] 5-10年 \n",
"625 2020-03-16 深圳 数据分析 本科 ['数据运营', '数据分析'] 3-5年 \n",
"479 2020-03-16 上海 运营 本科 ['数据分析', '游戏运营'] 1-3年 \n",
"328 2020-03-15 北京 数据分析 本科 ['数据分析'] 1-3年 \n",
"786 2020-03-13 深圳 运营 本科 ['数据分析', '游戏运营'] 应届毕业生 \n",
"759 2020-03-03 深圳 人工智能 本科 ['机器学习', '人工智能', '建模', '算法'] 5-10年 \n",
"394 2020-03-16 北京 数据分析 本科 ['BI'] 3-5年 \n",
"418 2020-03-16 北京 数据分析 本科 [] 3-5年 \n",
"\n",
" 薪资水平 new_col 合并列 \n",
"502 14000.0 高 上海数据分析 \n",
"346 27500.0 高 北京数据分析 \n",
"232 30000.0 高 杭州数据分析 \n",
"46 10000.0 低 广州数据分析 \n",
"253 30000.0 高 杭州数据分析 \n",
"314 30000.0 高 北京数据开发 \n",
"772 15000.0 高 深圳数据分析 \n",
"420 16000.0 高 北京数据分析 \n",
"572 25000.0 高 深圳数据开发 \n",
"156 10500.0 高 广州数据开发 \n",
"741 15000.0 高 深圳保险 \n",
"174 16000.0 高 杭州数据开发 \n",
"27 25000.0 高 广州运营 \n",
"625 18000.0 高 深圳数据分析 \n",
"479 12000.0 高 上海运营 \n",
"328 22500.0 高 北京数据分析 \n",
"786 8500.0 低 深圳运营 \n",
"759 60000.0 高 深圳人工智能 \n",
"394 30000.0 高 北京数据分析 \n",
"418 30000.0 高 北京数据分析 "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sample(20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 19 - 数据透视表\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"数据透视表是一个非常强大的工具,在Excel中有现成的工具,只需要**选中数据—>点击插入—>数据透视表**即可生成,并且支持**字段的拖取**实现不同的透视表,非常方便,比如制作地址、学历、薪资的透视表\n",
"\n",
"```{figure} gif/数据透视表.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"在Pandas中制作数据透视表可以使用pivot_table函数,例如制作地址、学历、薪资的透视表`pd.pivot_table(df,index=[\"地址\",\"学历\"],values=[\"薪资水平\"])`,虽然结果一样,但是并没有Excel一样方便调整与多样"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" 薪资水平 \n",
" \n",
" \n",
" 地址 \n",
" 学历 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 上海 \n",
" 不限 \n",
" 17000.000000 \n",
" \n",
" \n",
" 大专 \n",
" 10000.000000 \n",
" \n",
" \n",
" 本科 \n",
" 19464.285714 \n",
" \n",
" \n",
" 硕士 \n",
" 20642.857143 \n",
" \n",
" \n",
" 北京 \n",
" 不限 \n",
" 22833.333333 \n",
" \n",
" \n",
" 大专 \n",
" 19000.000000 \n",
" \n",
" \n",
" 本科 \n",
" 23726.086957 \n",
" \n",
" \n",
" 硕士 \n",
" 27500.000000 \n",
" \n",
" \n",
" 广州 \n",
" 不限 \n",
" 17750.000000 \n",
" \n",
" \n",
" 大专 \n",
" 10700.000000 \n",
" \n",
" \n",
" 本科 \n",
" 14916.666667 \n",
" \n",
" \n",
" 硕士 \n",
" 7666.666667 \n",
" \n",
" \n",
" 杭州 \n",
" 不限 \n",
" 17733.333333 \n",
" \n",
" \n",
" 大专 \n",
" 16625.000000 \n",
" \n",
" \n",
" 本科 \n",
" 20753.623188 \n",
" \n",
" \n",
" 硕士 \n",
" 14000.000000 \n",
" \n",
" \n",
" 深圳 \n",
" 不限 \n",
" 18833.333333 \n",
" \n",
" \n",
" 大专 \n",
" 10437.500000 \n",
" \n",
" \n",
" 本科 \n",
" 19313.793103 \n",
" \n",
" \n",
" 硕士 \n",
" 23150.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 薪资水平\n",
"地址 学历 \n",
"上海 不限 17000.000000\n",
" 大专 10000.000000\n",
" 本科 19464.285714\n",
" 硕士 20642.857143\n",
"北京 不限 22833.333333\n",
" 大专 19000.000000\n",
" 本科 23726.086957\n",
" 硕士 27500.000000\n",
"广州 不限 17750.000000\n",
" 大专 10700.000000\n",
" 本科 14916.666667\n",
" 硕士 7666.666667\n",
"杭州 不限 17733.333333\n",
" 大专 16625.000000\n",
" 本科 20753.623188\n",
" 硕士 14000.000000\n",
"深圳 不限 18833.333333\n",
" 大专 10437.500000\n",
" 本科 19313.793103\n",
" 硕士 23150.000000"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.pivot_table(df,index=[\"地址\",\"学历\"],values=[\"薪资水平\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 20 - vlookup\n",
"\n",
"\n",
"#### `Excel`\n",
"\n",
"\n",
"\n",
"VLOOKUP算是EXCEL中最核心的功能之一了,我们用一个简单的数据来进行示例\n",
"\n",
"```{figure} gif/vlookup.gif\n",
":width: 600px\n",
":align: center\n",
"```\n",
"\n",
"#### `Pandas`\n",
"\n",
"\n",
"在Pandas中没有现成的vlookup函数,所以实现匹配查找需要一些步骤,首先我们读取该表格"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 序号 \n",
" 科目 \n",
" 成绩 \n",
" 排名 \n",
" Unnamed: 4 \n",
" 序号.1 \n",
" 科目.1 \n",
" 成绩.1 \n",
" 排名.1 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" A \n",
" 语文 \n",
" 80 \n",
" 8 \n",
" NaN \n",
" C \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 1 \n",
" B \n",
" 数学 \n",
" 70 \n",
" 2 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 2 \n",
" C \n",
" 英语 \n",
" 60 \n",
" 4 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 3 \n",
" D \n",
" 政治 \n",
" 50 \n",
" 5 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 4 \n",
" E \n",
" 地理 \n",
" 90 \n",
" 6 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 5 \n",
" F \n",
" 化学 \n",
" 100 \n",
" 1 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 6 \n",
" G \n",
" 生物 \n",
" 77 \n",
" 3 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 序号 科目 成绩 排名 Unnamed: 4 序号.1 科目.1 成绩.1 排名.1\n",
"0 A 语文 80 8 NaN C NaN NaN NaN\n",
"1 B 数学 70 2 NaN NaN NaN NaN NaN\n",
"2 C 英语 60 4 NaN NaN NaN NaN NaN\n",
"3 D 政治 50 5 NaN NaN NaN NaN NaN\n",
"4 E 地理 90 6 NaN NaN NaN NaN NaN\n",
"5 F 化学 100 1 NaN NaN NaN NaN NaN\n",
"6 G 生物 77 3 NaN NaN NaN NaN NaN"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1 = pd.read_excel(\"vlookup.xlsx\")\n",
"df1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"接着将该dataframe切分为两个"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 序号 \n",
" 科目 \n",
" 成绩 \n",
" 排名 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" A \n",
" 语文 \n",
" 80 \n",
" 8 \n",
" \n",
" \n",
" 1 \n",
" B \n",
" 数学 \n",
" 70 \n",
" 2 \n",
" \n",
" \n",
" 2 \n",
" C \n",
" 英语 \n",
" 60 \n",
" 4 \n",
" \n",
" \n",
" 3 \n",
" D \n",
" 政治 \n",
" 50 \n",
" 5 \n",
" \n",
" \n",
" 4 \n",
" E \n",
" 地理 \n",
" 90 \n",
" 6 \n",
" \n",
" \n",
" 5 \n",
" F \n",
" 化学 \n",
" 100 \n",
" 1 \n",
" \n",
" \n",
" 6 \n",
" G \n",
" 生物 \n",
" 77 \n",
" 3 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 序号 科目 成绩 排名\n",
"0 A 语文 80 8\n",
"1 B 数学 70 2\n",
"2 C 英语 60 4\n",
"3 D 政治 50 5\n",
"4 E 地理 90 6\n",
"5 F 化学 100 1\n",
"6 G 生物 77 3"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2 = df1[[\"序号\",\"科目\",\"成绩\",\"排名\"]]\n",
"df2"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 序号 \n",
" 科目 \n",
" 成绩 \n",
" 排名 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" C \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 序号 科目 成绩 排名\n",
"0 C NaN NaN NaN"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df3 = df1[[\"序号.1\",\"科目.1\",\"成绩.1\",\"排名.1\"]]\n",
"df3.columns = [\"序号\",\"科目\",\"成绩\",\"排名\"]\n",
"df3 = df3.loc[0:0]\n",
"df3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最后修改索引并使用update进行两表的匹配"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 科目 \n",
" 成绩 \n",
" 排名 \n",
" \n",
" \n",
" 序号 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" C \n",
" 英语 \n",
" 60.0 \n",
" 4.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 科目 成绩 排名\n",
"序号 \n",
"C 英语 60.0 4.0"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2 = df2.set_index(\"序号\")\n",
"df3 = df3.set_index(\"序号\")\n",
"df3.update(df2)\n",
"df3"
]
}
],
"metadata": {
"jupytext": {
"formats": "ipynb,md:myst",
"text_representation": {
"extension": ".md",
"format_name": "myst"
}
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"source_map": [
11,
79,
84,
104,
107,
124,
126,
147,
150,
168,
172,
209,
215,
234,
236,
253,
258,
276,
279,
299,
302,
319,
321,
342,
346,
382,
384,
404,
406,
425,
427,
444,
447,
466,
470,
490,
493,
496,
501,
506,
509
]
},
"nbformat": 4,
"nbformat_minor": 4
}