pandas中apply与lambda
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来指定是对列进行运算。
结果如图所示: