熱線電話:13121318867

登錄
首頁精彩閱讀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數據分析師將為大家帶來更多優質的作品。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢