Python中的lambda和apply结合使用
1、 lambda
lambda原型為:lambda 參數(shù):操作(參數(shù))
lambda函數(shù)也叫匿名函數(shù),即沒有具體名稱的函數(shù),它允許快速定義單行函數(shù),可以用在任何需要函數(shù)的地方。這區(qū)別于def定義的函數(shù)。
lambda與def的區(qū)別:
1)def創(chuàng)建的方法是有名稱的,而lambda沒有。
2)lambda會(huì)返回一個(gè)函數(shù)對象,但這個(gè)對象不會(huì)賦給一個(gè)標(biāo)識(shí)符,而def則會(huì)把函數(shù)對象賦值給一個(gè)變量(函數(shù)名)。
3)lambda只是一個(gè)表達(dá)式,而def則是一個(gè)語句。
4)lambda表達(dá)式” : “后面,只能有一個(gè)表達(dá)式,def則可以有多個(gè)。
5)像if或for或print等語句不能用于lambda中,def可以。
6)lambda一般用來定義簡單的函數(shù),而def可以定義復(fù)雜的函數(shù)。
#單個(gè)參數(shù)的: g = lambda x : x ** 2 print g(3) """ 9 """ #多個(gè)參數(shù)的: g = lambda x, y, z : (x + y) ** z print g(1,2,2) """ 9 """2、map函數(shù)
map是python內(nèi)置函數(shù),會(huì)根據(jù)提供函數(shù)對指定的序列做映射。
map()函數(shù)的格式是:
map(function,iterable,...)
第一個(gè)參數(shù)接受一個(gè)函數(shù)名,后面的參數(shù)接受一個(gè)或多個(gè)可迭代的序列,返回的是一個(gè)集合。
把函數(shù)依次作用在list中的每一個(gè)元素上,得到一個(gè)新的list并返回。注意,map不改變原list,而是返回一個(gè)新list。
map()函數(shù)會(huì)將指定的函數(shù)依次作用于某個(gè)序列的每個(gè)元素,并返回一個(gè)迭代器對象。
例子1:
del square(x):return x ** 2map(square,[1,2,3,4,5])# 結(jié)果如下: [1,4,9,16,25]例子2:
map(lambda x, y: x+y,[1,3,5,7,9],[2,4,6,8,10])# 結(jié)果如下: [3,7,11,15,19]3、apply
Python中apply函數(shù)的格式為:apply(func,*args,**kwargs)
當(dāng)然,func可以是匿名函數(shù)。
用途:當(dāng)一個(gè)函數(shù)的參數(shù)存在于一個(gè)元組或者一個(gè)字典中時(shí),用來間接的調(diào)用這個(gè)函數(shù),并將元組或者字典中的參數(shù)按照順序傳遞給參數(shù)
解析:args是一個(gè)包含按照函數(shù)所需參數(shù)傳遞的位置參數(shù)的一個(gè)元組,簡單來說,假如A函數(shù)的函數(shù)位置為 A(a=1,b=2),那么這個(gè)元組中就必須嚴(yán)格按照這個(gè)參數(shù)的位置順序進(jìn)行傳遞(a=3,b=4),而不能是(b=4,a=3)這樣的順序。kwargs是一個(gè)包含關(guān)鍵字參數(shù)的字典,而其中args如果不傳遞,kwargs需要傳遞,則必須在args的位置留空。
apply的返回值就是函數(shù)func函數(shù)的返回值。
def function(a,b): print(a,b) apply(function,('good','better')) apply(function,(2,3+6)) apply(function,('cai','quan')) apply(function,('cai',),{'b':'caiquan'}) apply(function,(),{'a':'caiquan','b':'Tom'})輸出結(jié)果:
('good', 'better')
(2, 9)
('cai', 'quan')
('cai', 'caiquan')
('caiquan', 'Tom')
有時(shí)候,函數(shù)的參數(shù)可能是DataFrame中的行或者列。
DataFrame中apply的用法
#函數(shù)應(yīng)用和映射 import numpy as np import pandas as pd df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon']) print(df) """b d e utah -0.667969 1.974801 0.738890 ohio -0.896774 -0.790914 0.474183 texas 0.043476 0.890176 -0.662676 oregon 0.701109 -2.238288 -0.154442 """#將函數(shù)應(yīng)用到由各列或行形成的一維數(shù)組上。DataFrame的apply方法可以實(shí)現(xiàn)此功能 f=lambda x:x.max()-x.min() #默認(rèn)情況下會(huì)以列為單位,分別對列應(yīng)用函數(shù) t1=df.apply(f) print(t1) t2=df.apply(f,axis=1) print(t2)""" b 1.597883 d 4.213089 e 1.401566 dtype: float64 utah 2.642770 ohio 1.370957 texas 1.552852 oregon 2.939397 dtype: float64 """#除標(biāo)量外,傳遞給apply的函數(shù)還可以返回由多個(gè)值組成的Series def f(x):return pd.Series([x.min(),x.max()],index=['min','max']) t3=df.apply(f) #從運(yùn)行的結(jié)果可以看出,按列調(diào)用的順序,調(diào)用函數(shù)運(yùn)行的結(jié)果在右邊依次追加 print(t3)"""b d e min -0.896774 -2.238288 -0.662676 max 0.701109 1.974801 0.738890 """#元素級(jí)的python函數(shù),將函數(shù)應(yīng)用到每一個(gè)元素 #將DataFrame中的各個(gè)浮點(diǎn)值保留兩位小數(shù) f=lambda x: '%.2f'%x t3=df.applymap(f) print(t3) """b d e utah -0.67 1.97 0.74 ohio -0.90 -0.79 0.47 texas 0.04 0.89 -0.66 oregon 0.70 -2.24 -0.15 """#注意,之所以這里用map,是因?yàn)镾eries有一個(gè)元素級(jí)函數(shù)的map方法。而dataframe只有applymap。 t4=df['e'].map(f) print(t4)""" utah 0.74 ohio 0.47 texas -0.66 oregon -0.15 """?
參考自:Python中的lambda和apply用法_anshuai_aw1的博客-CSDN博客_apply lambda
總結(jié)
以上是生活随笔為你收集整理的Python中的lambda和apply结合使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++基础13-类和对象之继承2
- 下一篇: opencv16-Sobel算子