python apply lambda_Python中的 lambda,filter,map,zip,reduce,apply(学习笔记)

1、lambda(创建匿名函数)

lambda只是一个表达式,函数体比def简单很多,很多时候定义def,然后写一个函数太麻烦,这时候就可以用lambda定义一个匿名函数。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

f = lambda a,b: a if a>b elsebprint(f(6, 8))

2、filter(function, iterable)

filter(function, iterable):简单的理解为过滤器,需要两个参数,function,和一个可迭代对象(字符串、列表、元组),过滤器会依次将序列的值传入function中,

如果返回True的话,将其重新生成一个列表返回。

#Python 2.x 返回列表,Python 3.x 返回迭代器

1 list(filter(lambda x:True if x % 3 == 0 else False, range(50)))#在Python 2.x中,无需list()即可返回列表2 [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]

3、map(function, iterable, ...)

map():映射,用法和filter()类似,也是将序列放入函数进行运算,但是,不论运算结果为什么,map()都将忠实反馈,这是map()和filter()的主要区别。请注意,filter()和map()中的function都必要有一个返回值。

x = [1,2,3,4,5]

y= [2,3,4,5,6]

list(map(lambda x,y:(x*y)+2,x,y))#输出:[4, 8, 14, 22, 32]

1 >>> list(map(lambda x:True if x % 3 == 0 else False, range(100)))2 [True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True]

View Code

4、zip([iterable,...])

参数:iterabl -- 一个或多个迭代器; 返回值:返回一个对象 #Python 2.x 返回列表,Python 3.x 返回可迭代对象

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

>>>a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b) #返回一个对象

>>>zipped

>>> list(zipped) #list() 转换为列表

[(1, 4), (2, 5), (3, 6)]>>> list(zip(a,c)) #元素个数与最短的列表一致

[(1, 4), (2, 5), (3, 6)]>>> a1, a2 = zip(*zip(a,b)) #与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式

>>>list(a1)

[1, 2, 3]>>>list(a2)

[4, 5, 6]>>>

5、reduce

功能: 对一个序列进行压缩运算,得到一个值。但是reduce在python2的时候是内置函数,到了python3移到了functools模块,所以使用之前需要 from functools import reduce

调用: reduce(function,iterable),其中function必须传入两个参数,iterable可以是列表或者元组

from functools importreduce

y= [2,3,4,5,6]

reduce(lambda x,y: x + y,y) #直接返回一个值

其计算原理:

先计算头两个元素:f(2, 3),结果为5;

再把结果和第3个元素计算:f(5, 4),结果为9;

再把结果和第4个元素计算:f(9, 5),结果为14;

再把结果和第5个元素计算:f(14, 6),结果为20;

由于没有更多的元素了,计算结束,返回结果20。

6、apply

功能: 是pandas中的函数,应用对象为pandas中的DataFrame或者Series。大致有两个方面的功能:一是直接对DataFrame或者Series应用函数,二是对pandas中的groupby之后的聚合对象apply函数

调用: apply(function,axis),function表明所使用的函数,axis表明对行或者列做运算

例子:

importnumpy as np

a= np.random.randint(low=0,high=4,size=(2,4))

data=pd.DataFrame(a)

data.apply(lambda x:x*10)#输出:

总结

1、filter和map都是python内置的函数,可以直接调用,reduce在functools模块,apply在pandas模块

2、要过滤删减序列用filter;要对多个序列做函数运算用map;在pandas里面直接调用apply,尤其是聚合对象,当然还有agg,日后补充。reduce用得少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用`.apply(lambda x: )`可以对DataFrame列进行操作,其`x`表示Series的每个元素。下面是一个例子: 假设有一个DataFrame `df`,其有一列`'col'`: ``` import pandas as pd df = pd.DataFrame({'col': [1, 2, 3, 4, 5]}) ``` 如果想对这一列进行平方操作,可以使用`.apply()`方法: ``` df['col_squared'] = df['col'].apply(lambda x: x**2) ``` 这将创建一个新的列`'col_squared'`,其每个元素都是原列对应元素的平方值。 ### 回答2: 在Python使用`.apply(lambda x:)`函数可以对DataFrame的列进行逐个元素的处理。lambda函数接受一个参数x,用来表示DataFrame的每个元素,通过对每个元素进行相应的操作,然后将结果返回。以下是正确使用`.apply(lambda x:)`的示例: 1. 创建DataFrame: ``` import pandas as pd data = {'Name':['Tom', 'Nick', 'John'], 'Age':[20, 25, 30], 'Salary':[3000, 4000, 5000]} df = pd.DataFrame(data) ``` 2. 对列进行处理: ``` df['Age'] = df['Age'].apply(lambda x: x + 1) ``` 上述代码会将'Age'列的每个元素加1,并将结果更新到'Age'列。 3. 返回新的列: ``` df['NewSalary'] = df['Salary'].apply(lambda x: x*1.1) ``` 上述代码会创建一个名为'NewSalary'的列,其每个元素是原始'Salary'列的对应元素乘以1.1的结果。 4. 使用多个参数: 如果lambda函数需要多个参数,可以使用`.apply()`的`args`参数传递。例如: ``` def calculate_bonus(salary, performance): return salary * performance df['Bonus'] = df['Salary'].apply(lambda x: calculate_bonus(x, 0.1), args=(0.1,)) ``` 上述代码,定义了一个带有两个参数的函数calculate_bonus(),然后将`args`参数设置为(0.1,),将其传递给`.apply()`函数。lambda函数的第一个参数x表示'Salary'列的每个元素,0.1表示performance参数的值,通过`args`将其传递给calculate_bonus()函数。 总结:使用`.apply(lambda x:)`函数可以对DataFrame的列进行逐个元素的处理,通过lambda函数对每个元素进行处理,并将结果返回。可以使用`args`参数传递多个参数给lambda函数。 ### 回答3: 在使用Python的pandas库时,可以通过`.apply(lambda x: )`方法对DataFrame的列进行操作。 首先,`.apply()`方法用于将指定的函数应用到DataFrame的每一行或每一列。而`lambda x:`则是一种匿名函数,用于定义一个简单的函数,其`x`表示输入的参数。 通过`.apply(lambda x: )`可以实现对DataFrame的每个元素进行自定义操作。例如,我们有一个DataFrame `df`,其有一列`column1`,我们想要对该列的每个元素进行平方操作,可以使用以下代码: ```python df['column1'] = df['column1'].apply(lambda x: x**2) ``` 这段代码会遍历`df``column1`列的每个元素,并将其平方后重新赋值给原来的位置。 除了简单的数学操作,`.apply()`方法还可以用于处理更复杂的函数。例如,我们有一个自定义函数`my_function()`,希望将该函数应用到`df`的每一行,可以使用以下代码: ```python df = df.apply(lambda x: my_function(x), axis=1) ``` 这段代码会将`my_function()`应用到`df`的每一行,其`axis=1`表示按行进行操作。 需要注意的是,在使用`.apply(lambda x: )`时,要确保所定义的函数和每个元素的数据类型相匹配,以防止出现意外的错误。另外,`.apply()`方法是一种相对较慢的操作,如果需要处理较大的DataFrame,可能需要考虑使用其他更高效的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值