登录
首页精彩阅读4种python数据清洗中lambda表达式配合使用的函数!
4种python数据清洗中lambda表达式配合使用的函数!
2020-05-09
收藏

在使用python清理数据时,会接触到lambda表达式配合使用的四种函数、它们分别是:filter函数、map函数、sorted函数、reduce函数。下面我们来为大家详细讲解python清理数据领域的知识。

什么是lambda表达式

lambda 表达式是一个匿名函数,lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象,是一个匿名函数,即没有函数名的函数。

lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数,常用在临时需要一个类似于函数的功能但又不想定义函数的场合。它只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,该表达式的计算结果相当于函数的返回结果。

lambda表达式可以接受任意数量的参数,但函数只能包含一个表达式。表达式是lambda函数执行的一段代码,它可以返回任何值,返回函数对象。

lambda表达式可以返回函数对象。

在Python中,lambda的语法是唯一的。其形式如下:

编辑

我们可以有很多个参数,但是只能有一个表达式。lambda操作符不能有任何声明,它返回一个函数对象。其中,lambda是Python预留的关键字,argument_list和expression由用户自定义。

基本特性

lambda函数有如下特性:

  1. lambda函数是匿名的:所谓匿名函数,通俗地说就是没有名字的函数。lambda函数返回的函数对象是没有名字的,需要在lambda表达式外赋予名字。
  2. lambda函数有输入和输出:输入是传入到参数列表argument_list的值,输出是根据表达式expression计算得到的值。
  3. lambda函数一般功能简单:单行expression决定了lambda函数不可能完成太过复杂的逻辑,只能完成较为简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。

下面是一些lambda表达式的基本用法示例:

编辑

使用方法

lambda表达式返回的是一个函数对象,其本质上只有一种用法,那就是定义一个lambda匿名函数。在实际中,根据这个lambda函数应用场景的不同,lambda函数的用法有很多种,其中一种就是将lambda函数作为参数传递给其他函数。

Python有少数内置函数可以接收lambda函数作为参数,进行组合使用,这也是最为常见的一种用法。典型的此类内置函数有一下这四种。filter函数:筛选列表中所有满足条件的元素,lambda函数作为过滤列表元素的条件。

  • filter函数:筛选列表中所有满足条件的元素,lambda函数作为过滤列表元素的条件。
  • map函数:根据提供的函数对指定序列做映射,lambda函数作为映射。
  • sorted函数:对列表中所有元素进行排序,lambda函数可以用于指定排序规则。
  • reduce函数:列表中两两相邻元素逐一进行运算,lambda函数用于指定运算条件。
编辑

filter函数

filter( )函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,注意返回的不是列表,如果要转换为列表,可以使用 list()来转换。

该函数接收两个参数,第一个为函数,第二个为序列,filter函数的重点在于过滤,所以它必须有一个用于判断的工具,这就是function参数的函数,传入的函数返回值必须是布尔类型,序列的每个元素作为参数逐个传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

编辑

简单示例一:

编辑

简单示例二:

编辑

简单示例三:

编辑

map函数

map( )会根据提供的函数对指定序列做映射,即根据传入的函数逐一对序列中的元素进行计算。

该函数至少接收两个参数,第一个参数为函数function,第二个参数为可迭代对象iterable,第二个参数序列中的每一个元素调用第一个参数 function函数来进行计算,返回包含每次 function 函数返回值的可迭代对象,map( )函数和filter( )函数一样,在python3版本中返回的都是可迭代对象,有需要的话用list( )函数将其转换成列表格式。

编辑

简单示例一:

编辑

简单示例二:

编辑

map( )函数可以仅对一个序列进行运算,也可以输入多个序列进行并行运算,对多个序列同一位置的元素来逐步进行运算。序列不要求长度必须相同,最后返回的结果遵循木桶准则,以多个序列中长度最短的长度为准,即传入一个长度为4的序列,一个长度为7的序列,最终返回的序列长度为4。

简单示例三:

编辑

sorted函数

sorted( ) 函数的作用是对所有可迭代的对象进行排序操作。它和sort函数的作用类似,但它们之间还是有一些区别:

  • sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
  • list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内置函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  • sort( )和sorted( )函数的区别:
编辑

执行结果:

编辑

语法:

sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable:可迭代对象。
  • key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。具体使用中通常以lambda匿名函数作为key参数的传入,用以指定用以排序的对象。
  • reverse:排序规则,reverse为逆序的意思,当reverse = True表示降序 , reverse = False表示升序。默认为升序。

返回:

重新排序后的列表,无论用什么可迭代对象进行排序,最终返回的都是列表。

简单示例一:

一维的序列无需key参数,只需要可迭代对象和reverse排序规则即可,注意,第一个参数可以默认为iterable可迭代对象,不可更改顺序,后两个可选参数传入函数时,必须包含变量名称,例如

编辑

简单示例二:

二维及以上的序列可以使用key参数传入lambda匿名函数结合使用,实现按条件排序的作用,lambda函数的左右主要是用来指定用以排序的目标。

编辑

执行结果:

编辑

reduce函数

reduce() 函数在 python 2 是内置函数, 从python 3 开始移到了 functools 模块。所以在使用前需要先导入,否则无法直接使用。

reduce函数的功能是,从左到右对一个序列的项逐个地应用一个有两个参数的函数,用函数的功能对序列的项逐个的进行运算,最终返回所使用的函数的结果。例如:

编辑

reduce有三个参数,分别是

编辑

function有两个参数的函数, 必需参数sequencetuple ,list ,dictionary, string等可迭代对象,必需参数initial初始值, 可选参数,默认为0

  • function,即有两个符合序列数据类型运算参数的函数,可以是lambda匿名函数。
  • sequence,即序列,可以是python中的列表、元组、字符串、字典格式以及其他可迭代对象的序列。
  • initial,即初始值,是可选参数,没有该参数时,函数运行以序列中的第一个元素开始进行计算,如果有该参数,则以该参数为初始值开始和序列中的第一个元素开始计算。


reduce的工作过程是 :在迭代sequence(tuple ,list ,dictionary, string等可迭代对象)的过程中,首先把前两个元素传给函数参数,函数加工后,然后把得到的结果和第三个元素作为两个参数传给函数参数, 函数加工后得到的结果又和第四个元素作为两个参数传给函数参数,依次类推。如果传入了initial值,那么首先传的就不是 sequence的第一个和第二个元素,而是initial值和第一个元素。经过这样的累计计算之后合并序列到一个单一返回值。

将前面的例子中的加号改为乘号,实际上就从求和的函数变为求阶乘的函数:

编辑

我们再玩一些稍微复杂一些的用法,只是简单基本的用法介绍,对新手来说,理解肯定是不够的,所以下面讲点更深入的例子,以元组、字典类型的数据序列为目标来进行操作,我们的目标是计算元组中每一个元素中对应的薪资(wage)的平均数:

编辑

也能用t实它现分组:

编辑

通过以上两个案例可以看出,简单加减示例中很少出现的初始值参数initial恰恰是实现复杂目标的最重要的点,它可以说是整个实现过程中的地基,是塑造最终结果的骨骼。

更复杂的操作就没必要使用reduce+lambdal了,可以使用一些其他的函数或者自定义来进行处理。

总结

以上四种就是能和lambda函数结合一起使用的函数,除了reduce函数在python3中移到了 functools 模块。需要先导入模块才能使用,其他三种都是python的内置函数,可以直接使用。它们之中有一些相同点和不同点,通过总结后更方便区分和以后的使用。

相同点:

1、都是用以处理可迭代对象;

2、都可以配合lambda匿名函数进行使用;

不同点:

1、功能不同,lambda函数的作用不同

filter函数:筛选列表中所有满足条件的元素,lambda函数作为过滤列表元素的条件。关键词:筛选

map函数:根据提供的函数对指定序列做映射,lambda函数作为映射。关键词:映射

sorted函数:对列表中所有元素进行排序,lambda函数可以用于指定排序规则。关键词:排序

reduce函数:列表中两两相邻元素逐一进行运算,lambda函数用于指定运算条件。关键词:元素间运算

2、reduce函数不是内置函数

3、参数个数不同、序列和函数的传入顺序要求不同

记住不同函数的功能,最好的方法就是函数名,filter的意思为过滤器、过滤;map有提供信息(尤指其编排或组织方式)的意思,sorted则是排序,整理的意思,reduce为减少,缩小的意思。如此一看,就能很深刻的记住这几种函数的作用和用法了。


阅读完本篇有关python数据清洗的原创文章后,大家有没有一些收获,CDA数据分析师将为大家带来更多优质的作品。

数据分析咨询请扫描二维码

客服在线
立即咨询