作者|CDADataAnalyst选好菜品后,我们就可以开始切菜了。比如做凉拌黄瓜丝,找出黄瓜后,就可以把黄瓜切成丝。1.数值替换数值替换是将值A替换为B,可用于异常值替换处理和缺失值填充处理。主要有三种替换方式:一对一替换、多对一替换和多对多替换。1.一对一替换一对一替换是将某个区域中的所有一个值替换为另一个值。已知有一个年龄值为240。显然这是一个异常值。我们想把它换成一个正常范围内的年龄值(使用平均年龄33),如何实现呢?(1)Excel实现替换Excel中的某个值。首先,选择要替换的区域。如果只是替换某一列的值,只需要选中这一列即可;如果要在该区域进行替换,则拖动鼠标选中该区域。然后依次点击Edit菜单栏中的FindandSelect>Replace(如下图)调出替换界面。使用快捷键Ctrl+H调出替换界面。下图是替换界面,分别输入搜索内容和替换内容,然后根据需要点击全部替换或全部替换。(2)Python实现了replace()方法来替换python中的某个值。replace(A,B)表示用B替换A。上面的代码是替换age列,所以选择age列,然后调用replace()方法。有时需要替换整个表,比如替换整个表中的缺失值。此时replace()方法就等同于fillna()方法。np.NaN是python中缺失值的一种表示。2.多对一替换多对一替换就是用某个值替换一个区域内的多个值。已知有3个异常年龄(240、260、280)需要将这3个年龄换成正常范围平均年龄33,如何实现?(1)Excel实现在Excel中,需要使用if函数来实现多对一的替换。age列一直是D列,如果要替换这个异常值,可以使用下面的函数。上述公式用Excel中的OR()函数表示,如果D列等于240、260或280,则该单元格的值为33,否则为D列的值,替换后的结果如图在下图中。(2)Python实现在Python中实现多对一替换比较简单,也是使用replace()方法,replace([A,B],C)就是用C替换A和B。3.多-to-manyreplacement多对多替换其实就是在某个区域进行多个一对一的替换。例如将年龄异常值240替换为平均值减一,260替换为平均值,280替换为平均值加一。如何做到这一点?(1)Excel实现如果要在Excel中实现,需要用到函数,需要多个if嵌套语句来实现。同时,已知年龄列为D列。具体函数如下:下图展示了该函数的执行过程。替换后的结果如下图所示:(2)Python实现如果想在Python中实现多对多的替换,也可以使用replace()方法来表示替换值和被替换值以字典的形式,replace("A":"a","B":"b")表示用a替换A,用b替换B。2.数值排序数值排序是根据具体数值的大小进行排序。有升序和降序两种。1.按一列值排序按一列值排序是指将整个数据表按照某一列进行升序或降序排序。(1)Excel实现在Excel中,如果要对某列的值进行排序,只需选中该列的字段名,然后点击编辑菜单栏下的排序筛选按钮即可;在下拉菜单中选择升序或降序选项,操作流程如下图所示。根据销售ID升序排序前后的结果如下图所示:(2)Python实现如果我们想在Python中对某列进行排序,需要使用sort_values()方法,并指定sort_values名称后的括号中要排序的列,以及是否按升序或降序排序。上面代码表示df表按照col1列排序,ascending=False表示col1列按降序排序。Ascending参数的默认值为True,表示按升序排序。因此,如果要按照col1升序排序,只需要指定列名即可,无需另外声明排序方式。2.根据有缺失值的列进行排序(一)Python实现在Python中,当待排序的列中有缺失值时,可以通过设置na_position来设置缺失值的显示位置范围。默认参数值为last,可以留空,表示缺失值显示在最后。通过设置na_position参数,在最前面显示缺失值。3.多列按值排序多列按值排序是指同时根据多列数据进行升序和降序排序。当第一列有重复值时,按第二列排序。当第二天有重复值时,sortby第三列排序,以此类推。(1)Excel在Excel中实现多列排序,选中所有需要排序的数据,点击编辑菜单栏下的排序筛选按钮,在下拉菜单中选择自定义排序选项,出现如图所示界面会出现下图。添加条件就是添加排序列。在顺序上,可以分别定义每一列的升序或降序。例如,将下图左侧的Before表按照salesID从小到大的顺序排列,遇到重复的salesID时再按照交易时间的降序排列,得到右侧的After表下图。(2)Python在Python中实现多列排序。使用的方法也是sort_values(),只要在sort_values()后面的括号中指明要排序的多个列的名称以及每列以列表的形式排序即可。方式。上面代码表示df性能按照col1列升序排序,当col1列遇到重复值时,再按照col2列降序排序。对于表df,我们还是先按照salesid升序排列,遇到重复的salesid再按照交易时间降序排列。新增一列,用于存放数据的排名,排名从1开始(1)Excel在Excel中实现了两个用于排名的函数,RANK.AVG()和RANK.EQ()。当待排序的值没有重复值时,这两个函数的效果是完全一样的。这两个函数的区别在于处理重复值的方式。●RANK.AVG(number,ref,order)number表示要排序的值,ref表示整列值的范围,order表示降序或升序。当要排序的值包含重复项时,返回重复项的平均排名。销售ID的平均排名结果如下图所示。图中有两个salesID为1的值,假设一个rank为1,另一个rank为2,则两者的平均值为1.5,所以平均rank为1.5;还有两个salesID为2的值,同样假设一个rank为3,另一个rank为4,则两者的平均值为3.5;销售ID为3的值没有重复值,因此排名为5。●RANK.EQ(number,ref,order)RANK.EQ参数与RANK.AVG含义相同。当要排名的值有重复值时,RANK.EQ返回重复值的最佳排名。销售ID的最佳排序结果如下图所示。图中有两个销售ID为1的值,第一个重复值的排名为1,所以两个值的最佳排名为1;还有两个销售ID为2的值,第一个重复值的排名为3,所以两个值的最佳排名为3;salesID为3的值没有重复值,最佳排名为5。(2)Python实现Python中数值的排名,很少用到rank()方法。Rank()方法有两个主要参数,一个是ascending,用来表示升序还是降序,默认是升序,与Excel中顺序的含义一致;另一个是method,用于表示待排序的值有重复值时处理。下表是参数方法可以带的不同参数值和说明。该方法取平均值时的排名与Excel中的RANK.AVG函数一致。method的值为first时的排名情况,salesID为1的值有两个,第一个排在第1,第二个排在第2;销售ID为2,依此类推。method取值为min时的排名与Excel中的RANK.EQ函数一致。method取值为max时的排序情况与取值为min时的排序情况相反。销售ID为1的值有两个,第二个重复值的排名为2,所以两个值的排名都是2;salesID有两个值为2,两个重复的rank为4,所以两个value的rank为4。4.数值删除数值删除就是删除数据表中一些无用的数据。一、删除列(一)Excel中的实现在Excel中,要删除某一列或几列,只需选中这些列,然后单击鼠标右键,在弹出的菜单中选择删除选项(或单击鼠标右键(稍后按D键),如下图所示。(2)Python实现在Python中,删除一列,使用drop()方法,即在drop方法后的括号中指定要删除的列名或列的位置,即柱子。在drop方法后面的括号中,直接传入要删除的列的列名。需要添加一个参数axis,并且让它的参数值等于1,也就是删除列。也可以直接在drop方法后面的括号中传入要删除的列的位置,但是还需要用到axis参数。也可以将列名以列表的形式传递给column参数,此时不需要axis参数。2.删除行(1)Excel的实现在Excel中,删除某些行的方法与删除列的方法相同。先选中要删除的行,然后点击鼠标右键,在弹出的下拉菜单中选择删除选项即可删除该行。(2)Python实现在Python中,删除某些行的方法仍然是drop()。与删除列类似,删除行也指定了行相关信息。在drop方法后面的括号中,直接传入要删除的行的行名,并将axis参数值设置为0,表示删除该行。除了传入行索引名外,还可以直接在drop方法后面的括号中传入要删除的行的行号,同时还需要使用axis参数,使其参数值等于0.也可以将要删除的行的行名传给index参数,此时不需要axis参数。3.删除特定行删除特定行一般是指删除满足一定条件的行。我们前面提到的异常值的删除被认为是删除了特定的行。(1)Excel实现了两步删除Excel中的特定行。第一步是筛选出符合条件的行。第二步,选中这些被过滤的行,点击鼠标右键,在弹出的下拉菜单中选择删除选项。(2)Python中删除特定行的方法有些特殊。我们不直接删除满足条件的值,而是将不满足条件的值过滤掉作为新的数据源,这样要删除的行就被过滤掉了。在下面的例子中,要删除age值大于等于40对应的行,我们不直接删除这部分,而是取出它的相反部分,即过滤掉age小于40的行为一个新的数据源。五、数值计数数值计数是统计某一数值在一系列数值中出现的次数。(1)Excel在Excel中实现数值统计,我们使用COUNTIF()函数,COUNTIF()函数用于统计一个区域中满足给定条件的单元格的个数。range表示一系列值的范围,criteria表示某个值或某个条件。销售ID值的统计结果如下图所示。销售ID为1的值在范围F2:F6中出现了两次;销售ID为2的值也在此范围内出现两次;销售ID为3的值出现一次。(2)Python实现在Python中,统计某个值出现的次数,我们使用的方法是value_counts()。上面代码的运行结果表明,销售ID为2的值出现了两次,销售ID为1的值出现了两次,销售ID为3的值出现了一次。这些是值出现的绝对次数。您还可以查看不同值出现的比例。您只需要将参数normalize=True传递给value_counts()方法即可。上述代码运行结果表明,销售ID为2的值所占比例为0.4,销售ID为1的值所占比例为0.4,销售ID为3的值所占比例为0.2。上面salesID的排序是2,1,3,按照计数值(0.4,0.4,0.2)降序排列。通过设置sort=False,可以实现不按计数值降序排列。6.获取唯一值获取唯一值是将一系列值去除重复的结果。通常,表中的列可以被视为一系列值。(1)Excel在Excel中实现。如果我们想查看一列值中的唯一值,可以复制粘贴这一列值,然后删除重复的,剩下的就是唯一值。(2)Python实现在Python中,我们想要获取一列值的唯一值。总体思路与Excel相同。首先复制粘贴某列的值,然后使用删除重复的方法来实现。关于删除重复项前面提到过,本节使用另外一个方法unique()来获取唯一值。例如,要为表df中的销售ID获取唯一值,首先提取销售ID,然后使用unique()方法获取唯一值,代码如下。7、数值查找数值查找是检查数据表中的数据是否包含某个值或某些值。(1)Excel实现在Excel中,如果我们要查看某个值是否包含在数据表中,可以直接使用搜索功能。首先选择要搜索的区域,可以选择一列或多列。如果不勾选,默认会在整个表格中搜索。然后点击编辑菜单栏中的搜索选择按钮,在下拉菜单中选择搜索选项,如下图所示。下图为选择查找选项后弹出的查找替换对话框(也可以使用快捷键Ctrl+F打开查找替换对话框),在查找中输入要查找的内容即可what框,可以选择FindAll,这样会显示所有搜索到的内容;您也可以选择查找下一个,这样搜索结果会一一显示。(2)Python实现isin()方法在Python中用于检查数据表中是否包含某个值,可以同时查找多个值,只需在isin方法后的括号中指定即可.可以取出一列数据,然后对该列调用isin()方法,查看该列是否包含某/某值,包含则返回True,否则返回False。还可以查找某个值是否包含在整个表中。8.区间分割区间分割就是把一系列的值分成几个部分。比如现在有10个人,你需要把他们按照年龄分成三组。这种分割过程称为区间分割。(1)Excel实现在Excel中实现区间分割,我们使用if函数,具体公式如下:if函数的实现过程如下图所示。下图显示了使用if嵌套函数实现的结果。(2)Python在Python中实现了区间分割的cut()方法。cut()方法有一个参数bins来表示间隔。cut()方法的分割结果是几个左开右闭的区间,(0,3]表示大于0小于等于3,(3,6]表示大于3小于等于等于6,(6,10]表示大于6小于等于10。和cut()方法类似,还有qcut()方法,qcut()方法不需要指定分区interval,但是只需要指定partitions的个数,也就是你要将数据拆分成多少个partition,然后会根据待拆分数据的情况,将数据拆分成预先指定的份数split,基于每组数据数量尽可能相等的原则,当数据分布比较均匀时,cut()方法和qcut()方法得到的区间基本一致。数据分布不均匀,即方差比较大时,二会比较大。9、在特定位置插入新的行或列插入行或列也是比较常见的操作。具体的插入操作有两个关键要素,一是插入哪里,二是插入什么。(1)Excel实现在Excel中插入一行或一列,首先要确定在前面的位置插入一行或一列,然后选中这一列或这一行并单击鼠标右键,在弹出的菜单中选择插入选项向上下拉菜单。要在唯一标识码列前插入一列,选中唯一标识码列,点击鼠标右键,在弹出的下拉菜单中选择插入选项,如下图。完成以上操作后,就会多出一个新的空白行或列,在空白行或列中输入要插入的数据即可。(2)Python实现Python中没有专门的插入行的方法,可以把要插入的行当成一个新表,然后将两个表在纵轴方向拼接即可。关于表格拼接在后面章节会讲到。Python中用于插入新列的方法是insert(),insert方法后的括号表示要插入的位置,插入后新列的列名,以及要插入的数据。也可以以索引的形式直接插入列,新列可以直接等于某列的值。上面的代码表示插入了一个名为commoditycategory的新列,该列的值为以下列表中的值。十。行列互换所谓行列互换(又称转置),就是将行数据向列方向转换,将列数据向行方向转换。(1)Excel实现行列互换(transpose)在Excel中先复制要转置的内容,然后粘贴到新的区域,粘贴选项选择转置选项,如下图。转置前后的效果对比如下图所示。(2)Python实现在Python中,我们可以直接在源数据表的基础上调用.T方法,获取源数据表的转置结果。再次转置转置结果返回原始结果。转置表df,代码如下。再次转置转置后的表格,代码如下。11、索引重塑所谓索引重塑,就是对原来的索引进行重构。典型的DataFrame结构表如下表所示。上表是一个典型的DataFrame结构,使用行索引和列索引来确定唯一值,比如S1-C1的唯一值是1,S2-C3的唯一值是6。这种方法通过两个位置确定唯一值不仅可以用上面的表结构来表示,也可以用树结构来表示,如下图所示。树形结构其实就是在保持表类型行索引不变的前提下,将列索引变为行索引。其实就是为表类数据建立层次索引。将数据从表格数据转换为树数据的过程称为重塑。Excel中不存在此操作。Python中使用的方法是stack()。示例代码如下。stack()方法对应的方法是unstack()方法。stack()方法将表格数据转换为树数据,unstack()方法将树数据转换为表格数据。示例代码如下所示。12.长宽表转换长宽表转换就是将比较长(行数多)的表转换成比较宽(列数多)的表,或者把比较宽的表转换成比较长的表。下表是一个宽表(有很多列)。我们想将这个宽表转换成一个长表,如下表所示。上面将多列转换为多行的过程就是将宽表转换为长表的过程。这个转换过程有一个前提条件,就是必须有公共列。1.宽表转长表宽表转长表。在Excel中,一般是通过复制粘贴来实现的。下面主要看看如何用Python实现。在Python中有两种方法可以实现这种转换,一种是stack()方法,另一种是melt()方法。(1)stack()方法实现stack()将表格数据转换为树型数据时,将列索引变为行索引,同时保持行索引不变。这里,宽表转长表需要先将Sale2013、Sale2014、Sale2015、Sale2016改为行索引,Company和Name不变。因此需要先设置Company和Nmae为索引,然后调用stack()方法将列索引转换为行索引,最后使用reset_index()方法重置索引。示例代码如下。(2)melt()方法的实现使用melt()方法实现上述功能,代码如下。melt中的id_vars参数用于表示在宽表转长表时保持不变的列。var_name参数表示原列索引转换为“行索引”后对应的列名,value_name表示新索引对应的值的列名。.注意这里的“行索引”有双引号,不是实际的行索引,而是类似于实际的行索引。2.长表转宽表长表转宽表是宽表转长表的逆过程。常用的方法是数据透视表。我们将在10.2节中详细解释数据透视表的使用。到这里大概了解一下就够了。具体实现如下:上面的实现过程是将Company和Name设置为行索引,Year为列索引,Sale为值。更多干货内容会陆续为大家分享,请继续关注我们!你可以去:大数据和AI时代,专业人士都在高薪奔跑,你怎么能OUT?大数据、AI时代,专业人士都在高薪奔跑,你怎么能OUT?马上去:https://www.cda.cn/?seo
