熟练掌握Pandas是一个比较漫长的过程,阅读入门教程或API文档只是上手的一部分。在实际操作中,数据各式各样,需要转换的格式也各不相同,在不熟练的情况下,一时间可能想不到用什么恰当的Pandas函数,导致写出的Pandas代码会比较复杂,既浪费时间也让代码难以阅读。一个比较好的学习方法是,能够结合实际任务中的用例,仔细阅读背后实现对应Pandas函数。这样在自身遇到类似的情况时,很容易联想到可以使用的Pandas命令。这篇文章收集了在实际工作中常见的Pandas数据清洗用例,每一个用例给出原来的表格式与数据、处理后的表格式与数据,以及相应的pandas代码,在一些函数后,我也附上一些注释,进行一些拓展讲解。比较推荐读者熟悉Pandas基础用法后再进行阅读,入门学习时,官方教学User Guide是一个不错的资源。
Info
这篇文章还未完成,后面内容和排版还会持续更新。
(入门)加一列,显示每组的平均值
表:
|
|
目标:
|
|
实现方法:
|
|
注:
- 在第2个方法中,我们用到Pandas的一个特性,在赋值时,如果等号后面的变量是带label的(这里的label是group),pandas会将被赋值df中的label与赋值的label进行对齐。
(入门)加一列,显示组内排名
表:
|
|
目标:
|
|
实现方法:
|
|
注:
- rank方法中的method参数控制,在值相同情况下返回排名的方式。其中min返回相等值中最前的排名,相当于SQL中
rank()
;max相等值中最后的排名;average返回相等值中的平均排名;first在值相同的情况下,按照表从上到下顺序继续进行排名,相当于SQL中的row_number()
,dense表示当前值后一个值的排名相对只加一,相当于SQL中的dense_rank()
。以 100, 100, 200, 300 为例,从小到大排序,不同参数返回结果如下
- min [1, 1, 3, 4]
- max [2, 2, 3, 4]
- first[1, 2, 3, 4]
- average [1.5, 1.5, 3, 4]
- dense [1, 1, 2, 3]
(入门)加一列,显示累计到现在的平均值
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)加一列,显示组内上一值
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)一行展开成多行
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)多行转多列
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)多列转多行
|
|
|
|
|
|
(入门)两表join
表:
|
|
目标:
|
|
实现方法:
|
|
###(入门)选取以某个相同字符开头的列
表:
|
|
目标:
|
|
实现方式:
|
|
注:
- filter 是按照行或列的label值过滤(通常是字符串label)
- like 参数保留label有子字符串为入参的行或列
- regex 参数保留label中有子字符串匹配上入参的行或列
(入门)选出列表中的数值列
表:
|
|
目标:
|
|
实现方法:
|
|
(进阶)用新表更新旧表数据
表:
|
|
目标:
|
|
实现方法:
|
|
(进阶)按照
源:
|
|
目标:
|
|
实现方法:
|
|
注:
- 当 groupby 一个 category 类型的列时,默认不会打印所有category值,如果该category值下没有对应数据,会被省略掉,设置 observed=False 取消该特性。
(进阶)用组内平均值填充
源:
|
|
目标:
|
|
实现方法:
|
|
注:
df.select_dtypes('number').columns
返回所有的数值列
(进阶)对一个表不同列使用不同的聚合函数
|
|
目标:
|
|
实现方法:
|
|
注
- 在计算mean时,会将空值剔除。(计算count时候也会将空值剔除,不过这里没有体现出来)
(进阶)保留数据量大于3的组
源:
|
|
目标:
|
|
实现方法:
|
|
(入门)生成dummy variable
表:
|
|
目标:
|
|
实现方法:
|
|
dummy variable 转换
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)更改表列名
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)删除表的某一列
表:
|
|
目标:
|
|
实现方法:
|
|
(进阶)表多行转多列
表:
|
|
目标:
|
|
实现方法:
|
|
(进阶)表多列行转多行
表:
|
|
目标:
|
|
实现方法:
|
|
(入门)选取列为某些值的行
表:
|
|
目标:
|
|
实现方法:
|
|
(进阶)每组排名第2和第3的行
表:
|
|
目标:
(取每个地区工资排第2和第3的数据)
|
|
实现方法:
|
|
(进阶)用户连续登陆的天数
表:
|
|
目标:
|
|
实现方法:
|
|