前言
上一篇我们研究了
Pandas
的级联,这一节从如何在
DataFrame
中
处
理重复数据开始。
在DataFrame
中查找不重复的数据
在实际数据集中,经常会有大量重复的数据,为了去除重复,找到那些唯一的数据,在没有用
Pandas
之前,我个人对这类数据的处理是利用集合
set
的元素唯一性来实现,这样需要写不少的代码,但在
Pandas
中,只是一个函数即可搞定,下面我们来举例说明:
比如我们要查找列
col2
中的不重复数据,如果用
set
集合实现,我是这样子做的:
如果用
Pandas
来完成上述功能,只用一句即可:
如果要统计不重复数的个数,也只需要一句即可:
要统计某一列数据中数字出现的频率,原来我只能是用字典来实现,代码如下:
若用
Pandas
来处理,还是一条语句即可:
从上述例子可以看出,采用
Pandas
来对数据处理,可以用很简洁的方式代替原本需要组合语句才能实现的功能。
下面我们再来看看对数据的批处理。
apply
方法
关于
apply
、
map
等函数,在本公众号前面的文章中有介绍过,在
Pandas
中,也实现了
apply
函数,下面举例说明:
在上述例子中,我们自定义了一个求平方的函数,然后将刚才定义的数据框架的第1列数据分别应用到这个求平方函数中,即可得到该列每个数的平方,当然也可以用
Python
中内置的函数,比如对第3列数据求每个字符串的长度:
当然,我们还可以在
apply
中直接嵌入
lambda
函数:
获取
DataFrame
属性
有时候我们要得到
DataFrame
的列名和行名,这时就要用到获取其属性的方法,下面举例说明:
从上述输出结果来看,其列名是一个
Index
类型的数据,由于在定义
DataFrame
时,我们没有为其指定
index
选项,因此,它的
Index
采用的是
Pandas
默认的
RangeIndex
数字序列。
排序
对数据排序是经常要用到的操作,在
Excel
中可以以指定列对数据集排列,
Pandas
中也有类似的功能:
当然也可以逆向排序,此时只需要为其指定一个参数
ascending=False
即可,它的默认值是
True
,即默认从小到大,下面显示其逆序排列:
从上述结果输出可知,
sort_values
会生成新的数据框架,不会修改原数据,如果要修改原数据,则需要
inplace=True
,这个在之前的学习笔记中也提到有类似的函数也采用的是这种处理方式。
关于空值的查询
在构建一个
恰好够用的Pandas
子集的时候,我们介绍过在
Pandas
中,查找空值有两个函数,一是
isna
,一是
isnull
,由于在
DataFrame
中是用
numpy
中的
nan
来表示空值,因此我们推荐只用
isna
来查询空值,比如构建一个含空值的数据集如下:
对其查询空值:
数据透视表(
pivot table
)
熟悉
Excel
的同学一定对其中的数据透视表印象深刻,它可将原数据概述化(
summarizes
)为另一个表,在新的表中,可以很容易对进行分类、切片、过滤、排序、计数等等,下面我们来看一下
Pandas
中的透视表是如何创建的。先构建一个新的数据框架:
创建一个透视表要用到函数
.pivot_table
,下面我们将根据上面的
DataFrame
来创建一个透视表:
pivot_table
的参数
values
是要透视的数据点,
index
是指定的关键列,
columns
代表应该被分析的列,比如上面生成的透视表第一行,即是棕色的狗对应的
x
按
D
列值来算是1,而对应的
y
按
D
列值来算是3。因为黑色的狗没有对应的
y
,因此第二行中
y
列下为
NaN
。其余类似。
小结
本文首先对
Pandas
中的数据去重进行了分析,又探索了
apply
函数的应用,接着对于数据的排序进行了说明,在文章的最后,我们介绍了数据透视表的生成方法。