5.1数值替换

数值替换就是将数值A替换成B,可以用在异常值替换处理、缺失值填充处理中。主要有一对一替换、多对一替换、多对多替换三种替换方法。

5.1.1一对一替换

一对一替换是将某一块区域中的一个值全部替换成另一个值。

在Python中对某个值进行替换利用的是replace()方法,replace(A,B)表示将A替换成B。

5.数值操作 - 图1

5.1.2 多对一替换

多对一替换就是把一块区域中的多个值替换成某一个值。

在 Python 中实现多对一的替换比较简单,同样也是利用 replace()方法,replace([A,B],C)表示将A、B替换成C。

5.数值操作 - 图2

5.1.3多对多替换

多对多替换其实就是某个区域中多个一对一的替换。

在Python中若想实现多对多的替换,同样是借助replace()方法,将替换值与待替换值用字典的形式表示,replace({“A”:”a”,”B”:”b”}表示用a替换A,用b替换B。

5.数值操作 - 图3

5.2 数值排序

数值排序是按照具体数值的大小进行排序,有升序和降序两种,升序就是数值由小到大排列,降序是数值由大到小排列。

5.2.1 按照一列数值进行排序

按照一列数值进行排序就是整个数据表都以某一列为准,进行升序或降序排列。

在 Python 中我们若想按照某列进行排序,需要用到 sort_values()方法,在sort_values后的括号中指明要排序的列名,以及升序还是降序排列。

  1. df.sort_values(by = ["col1"],ascending = False)

上面代码表示df表按照col1列进行排序,ascending = False表示按照col1列进行降序排列。ascending 参数默认值为 True,表示升序排列。所以,如果是要根据col1列进行升序排序,则可以只指明列名,不需要额外声明排序方式。

5.数值操作 - 图4

5.2.2 按照有缺失值的列进行排序

在Python中,当待排序的列中有缺失值时,可以通过设置na_position参数对缺失值的显示位置进行设置,默认参数值为last,可以不写,表示将缺失值显示在最后。

5.数值操作 - 图5

5.2.3 按照多列数值进行排序

按照多列数值排序是指同时依据多列数据进行升序、降序排列,当第一列出现重复值时按照第二列进行排序,当第二列出现重复值时按照第三列进行排序,以此类推。

在 Python 中实现按照多列进行排序,用到的方法同样是 sort_values(),只要在sort-values后的括号中以列表的形式指明要排序的多列列名及每列的排序方式即可。

  1. df.sort_values(by = ["col1","col2"],ascending = [True,False])

上面代码表示df表先按照col1列进行升序排列,当col1列遇到重复时,再按照col2列进行降序排列。对于表df我们依旧先按照销售ID升序排列,当遇到重复的销售ID时,再按成交时间降序排列,代码如下所示。

5.数值操作 - 图6

5.3 数值排名

数值排名和数值排序是相对应的,排名会新增一列,这一列用来存放数据的排名情况,排名是从1开始的。

在Python中对数值进行排名,需要用到rank()方法。rank()方法主要有两个参数,一个是ascending,用来指明升序排列还是降序排列,默认为升序排列,和Excel中order的意思一致;另一个是method,用来指明待排列值有重复值时的处理情况。下表是参数method可取的不同参数值及说明。

method 说明
‘average’ 默认,在相等分组中,为各个值分配平均排名
‘min’ 使用整个分组的最小排名
‘max’ 使用整个分组的最大排名
‘first’ 按值在原始数据中出现顺序分配排名

5.数值操作 - 图7

5.4 数值删除

5.4.1 删除列

在Python中,要删除某列,用到的是drop()方法,即在drop方法后的括号中指明要删除的列名或者列的位置,即第几列。在drop方法后的括号中直接传入待删除列的列名,需要加一个参数axis,并让其参数值等于1,表示删除列。

5.数值操作 - 图8

还可以在drop方法后的括号中直接传入待删除列的位置,但也需要用axis参数。

5.数值操作 - 图9

也可以将列名以列表的形式传给columns参数,这个时候就不需要axis参数了。

5.数值操作 - 图10

5.4.2 删除行

在Python中,要删除某些行用到的方法依然是drop(),与删除列类似的是,删除行也要指明行相关的信息。

在drop方法后的括号中直接传入待删除行的行名,并让axis参数值等于0,表示删除行。

除了传入行索引名称,还可以在drop方法后的括号中直接传入待删除行的行号,也需要用axis参数,并让其参数值等于0。

也可以将待删除行的行名传给index参数,这个时候就不需要axis参数了。

5.4.3 删除特定行

删除特定行一般指删除满足某个条件的行,我们前面的异常值删除算是删除特定的行。

在Python中删除特定行使用的方法有些特殊,我们不直接删除满足条件的值,而是把不满足条件的值筛选出来作为新的数据源,这样就把要删除的行过滤掉了。在如下例子中,要删除年龄值大于等于40对应的行,我们并不直接删除这一部分,而是把它的相反部分取出来,即把年龄小于40的行筛选出来作为新的数据源。

5.数值操作 - 图11

5.5 数值计数

数值计数就是计算某个值在一系列数值中出现的次数。

在Python中,要对某些值的出现次数进行计数,我们用到的方法是value_counts()。

5.数值操作 - 图12

上面代码运行的结果表示销售ID为3的值出现了两次,销售ID为3的值出现了两次,销售ID为4的值出现了1次,销售ID为1的值出现了1次。这些是值出现的绝对次数,还可以看一下不同值出现的占比,只需要给value_counts()方法传入参数normalize = True即可。

5.数值操作 - 图13

5.6 唯一值获取

在Python中,我们要获取一列值的唯一值,整体思路与Excel的是一致的,先把某一列的值复制粘贴出来,然后用删除重复项的方法实现,关于删除重复项在前面讲过了,本节用另一种获取唯一值的方法unique()实现。举个例子,对表df中的销售ID取唯一值,先把销售ID取出来,然后利用unique()方法获取唯一值,代码如下所示。

5.数值操作 - 图14

5.7 数值查找

数值查找就是查看数据表中的数据是否包含某个值或者某些值。

在Python中查看数据表中是否包含某个值用到的是isin()方法,而且可以同时查找多个值,只需要在isin方法后的括号中指明即可。

可以将某列数据取出来,然后在这一列上调用 isin()方法,看这一列中是否包含某个/些值,如果包含则返回True,否则返回False。

5.数值操作 - 图15

也可以针对全表查找是否包含某个值。

5.数值操作 - 图16

5.8 区间切分

区间切分就是将一系列数值分成若干份,比如现在有10个人,你要根据这10个人的年龄将他们分为三组,这个切分过程就称为区间切分。

在Python中对区间切分利用的是cut()方法,cut()方法有一个参数bins用来指明切分区间。

cut()方法的切分结果是几个左开右闭的区间,(0,3]就表示大于0小于等于3,(3,6]表示大于3小于等于6,(6,10]表示大于6小于等于10。与cut()方法类似的还有qcut()方法,qcut()方法不需要事先指明切分区间,只需要指明切分个数,即你要把待切分数据切成几份,然后它就会根据待切分数据的情况,将数据切分成事先指定的份数,依据的原则就是每个组里面的数据个数尽可能相等。

在数据分布比较均匀的情况下,cut()方法和 qcut()方法得到的区间基本一致,当数据分布不均匀,即方差比较大时,两者得到的区间的偏差就会比较大。

5.数值操作 - 图17

5.9 插入新的行或列

在Python中没有专门用来插入行的方法,可以把待插入的行当作一个新的表,然后将两个表在纵轴方向上进行拼接。关于表拼接在后面再学。

在Python中插入一个新的列用到的方法是insert(),在insert方法后的括号中指明要插入的位置、插入后新列的列名,以及要插入的数据。

5.数值操作 - 图18

还可以直接以索引的方式进行列的插入,直接让新的一列等于某列值即可。

5.数值操作 - 图19

5.10 行列互换

在 Python 中,我们直接在源数据表的基础上调用.T 方法即可得到源数据表转置后的结果。

5.数值操作 - 图20

5.11 索引重塑

所谓的索引重塑就是将原来的索引进行重新构造。典型的DataFrame结构的表如下表所示。

5.数值操作 - 图21

上面这种表是典型的DataFrame结构,它用一个行索引和一个列索引来确定一个唯一值,比如S1-C1唯一值为1,S2-C3唯一值为6。这种通过两个位置确定一个唯一值的方法不仅可以用上述这种表格型结构表示,而且可以用一种树形结构来表示,如下图所示。

5.数值操作 - 图22

树形结构其实就是在维持表格型行索引不变的前提下,把列索引也变成行索引,其实就是给表格型数据建立层次化索引。我们把数据从表格型数据转换到树形数据的过程叫重塑,这种操作在Excel中没有,在Python用到的方法是stack(),示例代码如下所示。

5.数值操作 - 图23

与stack()方法相对应的方法是unstack()方法,stack()方法是将表格型数据转化为树形数据,而unstack()方法是将树形数据转为表格型数据,示例代码如下所示。

5.数值操作 - 图24