
作者:俊欣
來源:關于數據分析與可視化
今天小編打算稍微中規中矩一些,寫一篇技術類的干貨文章。
這篇文章小編來講講lambda方法以及它在pandas模塊當中的運用,熟練掌握可以極大地提高數據分析與挖掘的效率
我們第一步需要導入模塊以及數據集
import pandas as pd
df = pd.read_csv("IMDB-Movie-Data.csv")
df.head()
一般我們是通過在現有兩列的基礎上進行一些簡單的數學運算來創建新的一列,例如
df['AvgRating'] = (df['Rating'] + df['Metascore']/10)/2
但是如果要新創建的列是經過相當復雜的計算得來的,那么lambda方法就很多必要被運用到了,我們先來定義一個函數方法
def custom_rating(genre,rating): if 'Thriller' in genre: return min(10,rating+1) elif 'Comedy' in genre: return max(0,rating-1) elif 'Drama' in genre: return max(5, rating-1) else: return rating
我們對于不同類別的電影采用了不同方式的評分方法,例如對于“驚悚片”,評分的方法則是在“原來的評分+1”和10分當中取一個最小的,而對于“喜劇”類別的電影,則是在0分和“原來的評分-1”當中取一個最大的,然后我們通過apply方法和lambda方法將這個自定義的函數應用在這個DataFrame數據集當中
df["CustomRating"] = df.apply(lambda x: custom_rating(x['Genre'], x['Rating']), axis = 1)
我們這里需要說明一下axis參數的作用,其中axis=1代表跨列而axis=0代表跨行,如下圖所示
在pandas當中篩選數據相對來說比較容易,可以用到& | ~這些操作符,代碼如下
# 單個條件,評分大于5分的 df_gt_5 = df[df['Rating']>5] # 多個條件: AND - 同時滿足評分高于5分并且投票大于100000的 And_df = df[(df['Rating']>5) & (df['Votes']>100000)] # 多個條件: OR - 滿足評分高于5分或者投票大于100000的 Or_df = df[(df['Rating']>5) | (df['Votes']>100000)] # 多個條件:NOT - 將滿足評分高于5分或者投票大于100000的數據排除掉 Not_df = df[~((df['Rating']>5) | (df['Votes']>100000))]
這些都是非常簡單并且是常見的例子,但是要是我們想要篩選出電影的影名長度大于5的部分,要是也采用上面的方式就會報錯
df[len(df['Title'].split(" "))>=5]
output
AttributeError: 'Series' object has no attribute 'split'
這里我們還是采用apply和lambda相結合,來實現上面的功能
#創建一個新的列來存儲每一影片名的長度 df['num_words_title'] = df.apply(lambda x : len(x['Title'].split(" ")),axis=1) #篩選出影片名長度大于5的部分 new_df = df[df['num_words_title']>=5]
當然要是大家覺得上面的方法有點繁瑣的話,也可以一步到位
new_df = df[df.apply(lambda x : len(x['Title'].split(" "))>=5,axis=1)]
例如我們想要篩選出那些影片的票房低于當年平均水平的數據,可以這么來做。
我們先要對每年票房的的平均值做一個歸總,代碼如下
year_revenue_dict = df.groupby(['Year']).agg({'Revenue(Millions)':np.mean}).to_dict()['Revenue(Millions)']
然后我們定義一個函數來判斷是否存在該影片的票房低于當年平均水平的情況,返回的是布爾值
def bool_provider(revenue, year): return revenue
然后我們通過結合apply方法和lambda方法應用到數據集當中去
new_df = df[df.apply(lambda x : bool_provider(x['Revenue(Millions)'],
x['Year']),axis=1)]
我們篩選數據的時候,主要是用.loc方法,它同時也可以和lambda方法聯用,例如我們想要篩選出評分在5-8分之間的電影以及它們的票房,代碼如下
df.loc[lambda x: (x["Rating"] > 5) & (x["Rating"] < 8)][["Title", "Revenue (Millions)"]]
轉變指定列的數據類型
通常我們轉變指定列的數據類型,都是調用astype方法來實現的,例如我們將“Price”這一列的數據類型轉變成整型的數據,代碼如下
df['Price'].astype('int')
會出現如下所示的報錯信息
ValueError: invalid literal for int() with base 10: '12,000'
因此當出現類似“12,000”的數據的時候,調用astype方法實現數據類型轉換就會報錯,因此我們還需要將到apply和lambda結合進行數據的清洗,代碼如下
df['Price'] = df.apply(lambda x: int(x['Price'].replace(',', '')),axis=1)
方法調用過程的可視化
有時候我們在處理數據集比較大的時候,調用函數方法需要比較長的時間,這個時候就需要有一個要是有一個進度條,時時刻刻向我們展示數據處理的進度,就會直觀很多了。
這里用到的是tqdm模塊,我們將其導入進來
from tqdm import tqdm, tqdm_notebook
tqdm_notebook().pandas()
然后將apply方法替換成progress_apply即可,代碼如下
df["CustomRating"] = df.progress_apply(lambda x: custom_rating(x['Genre'],x['Rating']),axis=1)
output
當lambda方法遇到if-else
當然我們也可以將if-else運用在lambda自定義函數當中,代碼如下
Bigger = lambda x, y : x if(x > y) else y
Bigger(2, 10)
output
10
當然很多時候我們可能有多組if-else,這樣寫起來就有點麻煩了,代碼如下
df['Rating'].apply(lambda x:"低分電影" if x < 3 else ("中等電影" if x>=3 and x < 5 else("高分電影" if x>=8 else "值得觀看")))
看上去稍微有點凌亂了,這個時候,小編這里到還是推薦大家自定義函數,然后通過apply和lambda方法搭配使用
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25