pandas中apply與lambda
阿新 • • 發佈:2021-12-27
lambda
lambda:輸入是傳入到引數列表x的值,輸出是根據表示式(expression)計算得到的值。
比如:lambda x, y: xy#函式輸入是x和y,輸出是它們的積xy
lambda x :x[-2:] #x是字串時,輸出字串的後兩位
lambda x :func #輸入 x,通過函式計算後返回結果
lambda x:'%.2f' % x # 對結果保留兩位小數
apply
當想讓方程作用在一維的向量上時,可以使用apply來完成,常常與lambda合用,如下所示,修改某列的字元,只保留後兩位
df['time']=df['time'].apply(lambda x:x[-2:])
例:由一組dataframe資料,包括有數值型的三列氣象要素,由這三列通過公式計算人體舒適指數
應用到的人體舒適指數計算公式:
import pandas as pd import numpy as np import math path='data.csv' #檔案路徑 data=pd.read_csv(path,index_col=0,encoding='gbk') #讀取資料有中文時用gbk解碼 #定義舒適指數公式函式,結果保留1位小數 def get_CHB(T,RH,S): return round(1.8*T-0.55*(1.8*T-26)*(1-RH/100)-3.2*math.sqrt(S)+32,1)#增加一列CHB並計算資料後賦值 data['舒適指數']=data.apply(lambda x:get_CHB(x['平均氣溫'],x['平均相對溼度'],x['2M風速']),axis=1) #列印結果 print(data) #儲存結果 data.to_csv('D:\\CHB.csv',encoding='gbk')
程式碼中使用了apply和lambda的組合,傳入的引數x為整個data資料,在函式中引入的引數則是x[‘平均氣溫’],x[‘平均相對溼度’],x[‘2M風速’],與自定義的函式get_CHB對應。最後需使用axis=1來指定是對列進行運算。
結果如圖所示: