[Python筆記] 新手必學:使用 Lambda Function 解決資料篩選和轉換問題

更新於 發佈於 閱讀時間約 10 分鐘

What's up guys! How are you doing? 我是 Rex,今天繼續跟大家分享我的 Python 筆記。

Introduction

今天的主題跟前幾篇不太一樣,我想跟各位介紹一個很好用的函式 - Lambda Function。記得大學在做資料分析的時候常常看到其他人的作品有用到這個技巧,但那時總覺得霧煞煞,覺得這個方法不必要,而且不好懂。我是到了實習公司之後才領悟這個方法的實用以及好處,接下來我就簡單地跟各位介紹這個技巧的使用方法。 Lambda Function 也稱為匿名函式,它與我們熟悉的函式差別就在 lambda 函式是 one-line 而且通常用在當你只需要使用到這個函式一次時,就可以使用這個方法,不僅可以避免建立一個 def block,也可以幫助你寫一個精準的 code。

優點:

  1. 簡單快捷:Lambda 函式是一行代碼,適合用在只需要簡單的操作時。
  2. 不需要命名:不需要為它創建一個新函式名,當你只需要簡單的計算或一個小範圍的操作時,這種方法非常實用。
  3. 即時使用:適合用在一個「立即」的情境,例如排序、過濾等簡單的運算操作。

Coding Practice

因為今天的範例使用的資料都不相同,因此我不多描述資料,但我在這邊提供一個我覺得蠻好懂也實用的小抄,幫助大家理解和記憶!

要不要使用變數命名完全取決於使用的時機以及情境,從我提供的例子可以看到,我並沒有使用變數接 Lambda 函式,但在有些情況下的確可以這樣使用。我認為最常用的情境是搭配 filter 或是 map 這樣的函式,你可以在這些函式中設計你自己的條件,細節可以在我下面的範例中看到。

  1. 資料篩選 (Data Filtering) - 很常跟 filter () 一起使用!例子1(篩選數字)/ 例子2(篩選點擊某個產品超過5次的顧客)/ 例子3(篩選出年紀大於30且在 Engineering 部門工作的員工) 。
# Case1 - 篩選數字
# 先建立一個由1~10組成的列表​
numbers = [i for i in range(1, 11)]

# Lambda 函式定義篩選的標準(偶數)​
# 解釋: filter 函式採用我自訂的 lambda 函式,numbers 這個變數是我要篩選的原始資料。列表內的元素會逐一的被丟到 lambda 函式中做條件判斷
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# Outputs: [2, 4, 6, 8, 10]

# Case2 - 篩選出點擊某個產品超過 5 次的顧客
customer_clicks = {
"client1": 3,
"client2": 6,
"client3": 2,
"client4": 7,
"client5": 4,
"client6": 10
}

# 解釋: 將 clicks 丟到 lambda 函式中,當點擊超過5次,該筆資料就被儲存到字典中
frequent_customers = {client: clicks for client, clicks in customer_clicks.items() if (lambda x: x> 5)(clicks)}
frequent_customers # Outputs: {'client2': 6, 'client4': 7, 'client6': 10}

# Case 3 - 篩選出年紀大於30且在 Engineering 部門工作的員工
employees = [
{'name': 'Alice', 'age': 28, 'department': 'Marketing'},
{'name': 'Bob', 'age': 35, 'department': 'Engineering'},
{'name': 'Charlie', 'age': 42, 'department': 'Engineering'},
{'name': 'David', 'age': 25, 'department': 'HR'},
{'name': 'Eve', 'age': 38, 'department': 'Engineering'}
]

# filter() 將此條件應用於員工列表,從而產生一個新列表
filtered_employees = list(filter(lambda e: e['age'] > 30 and e['department'] == 'Engineering', employees))

"""
Outputs:
[{'name': 'Bob', 'age': 35, 'department': 'Engineering'},
{'name': 'Charlie', 'age': 42, 'department': 'Engineering'},
{'name': 'Eve', 'age': 38, 'department': 'Engineering'}]
"""
  1. 資料轉換 (Data Transformation) - 很常跟 map () 一起使用!例子1(調整溫度)/ 例子2(調整產品價錢)。
# Case1 - 調整溫度

celsius_temperatures = [0, 20, 30, 100]

# 解釋: 列表中的溫度被丟到 lambda function 中做轉換,儲存到一個新的列表中
fahrenheit_temperatures = list(map(lambda c: c * 9/5 + 32, celsius_temperatures))
# Outputs: [32.0, 68.0, 86.0, 212.0]

# Case2 - 調整產品價錢

products = [
{'name': 'Product A', 'price': 45},
{'name': 'Product B', 'price': 55},
{'name': 'Product C', 'price': 30},
{'name': 'Product D', 'price': 75}
]

# map() 將此 lambda 函數應用於清單中的每個產品,根據條件轉換原始資料
# 解釋: 字典被丟到 lambda function 中,函式會一筆一筆的處理傳入的資料
adjusted_prices = list(map(lambda p: {'name': p['name'], 'price': p['price'] * 1.10 if p['price'] < 50 else p['price']}, products))

"""
Outputs:
[{'name': 'Product A', 'price': 49.50000000000001},
{'name': 'Product B', 'price': 55},
{'name': 'Product C', 'price': 33.0},
{'name': 'Product D', 'price': 75}]
"""


今天的教程雖然偏短,但每一部分都非常重要!希望今天的教學能幫助讀者更深入了解這個實用的功能。過去我的範例都偏簡單且「假」,但接下來我計畫在出完 NumPy 和 Pandas 的筆記後,展示更實務的資料分析操作。若有機會,也會跟大家分享實際的專案經驗。今天的文章中,我們依然會提供練習題,希望通過這些練習,幫助大家更好地理解和應用 Lambda Function。

Coding Question

  1. 使用 filter 搭配 Lambda Function 篩選出一個數字清單中所有大於 10 的元素。
  2. 使用 map 搭配 Lambda Function 將一個字串列表中的每個字串轉為大寫。

Concpet Question

  1. Lambda Function 的主要優點是什麼?試舉一個例子說明如何將 Lambda Function 用於資料篩選或資料轉換。


Conclusion

今天的教學就到這裡啦!希望大家透過這篇文章對 Lambda Function 有更深入的了解。如果你對文章中提到的操作或應用有任何問題,歡迎在留言區討論,或者分享你使用這個方法解決問題的經驗!也別忘了試試我提供的練習題目喔!祝大家練習順利,我們下次見~


Reference

留言
avatar-img
留言分享你的想法!
avatar-img
CodingWRex的沙龍
1會員
7內容數
CodingWRex的沙龍的其他內容
2024/12/16
本篇Python筆記介紹了List和Dictionary Comprehensions的應用與優勢。通過具體例子展示如何利用這些生成式來進行資料篩選、轉換和整合,並提升程式碼的可讀性和效能。適合新手學習如何用簡潔的語法來快速創建和操作資料結構,幫助你在資料分析中更靈活應用Python。
Thumbnail
2024/12/16
本篇Python筆記介紹了List和Dictionary Comprehensions的應用與優勢。通過具體例子展示如何利用這些生成式來進行資料篩選、轉換和整合,並提升程式碼的可讀性和效能。適合新手學習如何用簡潔的語法來快速創建和操作資料結構,幫助你在資料分析中更靈活應用Python。
Thumbnail
2024/12/13
在這篇文章中,通過聖誕節主題來學習Python內建序列函式。介紹了enumerate(), zip(), sorted() 和 reversed()。示範了如何在迭代過程中追蹤索引和值、將多個序列合併成對、對可迭代對象進行排序和反向顯示等操作。這些函式簡化了代碼,提升了可讀性和效能,適合新手學習。
Thumbnail
2024/12/13
在這篇文章中,通過聖誕節主題來學習Python內建序列函式。介紹了enumerate(), zip(), sorted() 和 reversed()。示範了如何在迭代過程中追蹤索引和值、將多個序列合併成對、對可迭代對象進行排序和反向顯示等操作。這些函式簡化了代碼,提升了可讀性和效能,適合新手學習。
Thumbnail
2024/12/12
在這篇Python筆記中,我們將探索如何使用元組來管理地理資訊數據。元組是一種有序且不可變的資料結構,非常適合用於儲存地理座標等固定不變的資料。通過實際的Coding Example,我們將展示如何定義元組、進行解包操作,並如何利用元組來簡化地理資訊的管理和處理。
Thumbnail
2024/12/12
在這篇Python筆記中,我們將探索如何使用元組來管理地理資訊數據。元組是一種有序且不可變的資料結構,非常適合用於儲存地理座標等固定不變的資料。通過實際的Coding Example,我們將展示如何定義元組、進行解包操作,並如何利用元組來簡化地理資訊的管理和處理。
Thumbnail
看更多
你可能也想看
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
Python 提供了一系列內建函式,其中一部分涉及數學和數學操作。 以下是一些常用的內建函式和數學相關的函式: 基本數學運算: abs(x): 返回 x 的絕對值。 result = abs(-5) print(result) # 輸出: 5 max(iterable) 和 min(
Thumbnail
Python 提供了一系列內建函式,其中一部分涉及數學和數學操作。 以下是一些常用的內建函式和數學相關的函式: 基本數學運算: abs(x): 返回 x 的絕對值。 result = abs(-5) print(result) # 輸出: 5 max(iterable) 和 min(
Thumbnail
繼「【Google Colab Python系列】 資料處理神器 Pandas 起手式」之後,相信對於各位來說已經是小兒科了吧,沒關係! 我們今天來增加一點點小挑戰,你知道嗎? Pandas對於大部分人的第一印象就是「不就表格化而已,有什麼了不起?」、「幫我們整理格式轉換的介接器」...,但其實它不
Thumbnail
繼「【Google Colab Python系列】 資料處理神器 Pandas 起手式」之後,相信對於各位來說已經是小兒科了吧,沒關係! 我們今天來增加一點點小挑戰,你知道嗎? Pandas對於大部分人的第一印象就是「不就表格化而已,有什麼了不起?」、「幫我們整理格式轉換的介接器」...,但其實它不
Thumbnail
過往我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需
Thumbnail
過往我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需
Thumbnail
Hi,大家好。我是茶桁。 讲完了基础函数和高阶函数之后,我们这一节来研究下Python的内置函数,看看Python在安装完毕之后的解释器里,到底都预先给我们提供好了哪些可用的函数。 本节内容着重介绍一些常用函数,并且会做一些应用上的示例。当然,对于Python的内置函数,我们还可以查询官方文档,
Thumbnail
Hi,大家好。我是茶桁。 讲完了基础函数和高阶函数之后,我们这一节来研究下Python的内置函数,看看Python在安装完毕之后的解释器里,到底都预先给我们提供好了哪些可用的函数。 本节内容着重介绍一些常用函数,并且会做一些应用上的示例。当然,对于Python的内置函数,我们还可以查询官方文档,
Thumbnail
本篇將帶你學習 Python 的基本語法和資料型態。我們將從變數和資料型態開始,包括整數、浮點數、字串和布林值。接著,我們將探討輸入和輸出的方法,讓你能夠與使用者進行互動。最後,我們會介紹基本運算符和運算子,以進行數值計算。通過這些學習筆記,你將輕鬆掌握 Python 的基礎知識,讓我們開始吧!
Thumbnail
本篇將帶你學習 Python 的基本語法和資料型態。我們將從變數和資料型態開始,包括整數、浮點數、字串和布林值。接著,我們將探討輸入和輸出的方法,讓你能夠與使用者進行互動。最後,我們會介紹基本運算符和運算子,以進行數值計算。通過這些學習筆記,你將輕鬆掌握 Python 的基礎知識,讓我們開始吧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News