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來指定是對列進行運算。
結果如圖所示: