python匿名函数多返回值处理的一个小技巧

python 匿名函数(lamda函数)结合apply在高效大数据处理方面有着较大的用处,但麻烦的是,lamda函数严格意义上只能有一个返回值,面对需要多个返回值的场景就很麻烦。 例如,根据报表数据计算静态PE、滚动PE、动态PE,一次遍历基本就能完成,但如果怎么获得一次遍历后多个返回值,并很方便的应用呢? 我们继续上面的例子:
如果按以下例子直接调用返回值

def  calculate_PE(x1,x2,...)
    计算
    ...
    return pe_static,pe_TTM,pe_TR
主程序
...
# 把市盈率(PE)和基本面数据拼接
df['pe_static'],df['pe_TTM'],df['pe_TR']=df_code.apply(lambda row:calculate_PE((x1,x2,...),axis=1)

将会报错ValueError: too many values to unpack (expected 3) 即返回值和变量不匹配

为啥呢,主要是df_code.apply(lambda row:calculate_PE((x1,x2,…),axis=1) 实际返回值是一个以(returnVar1,returnVar2,returnVar3)元组元素组成的Series类型,这么用当然会报错。

换个用法,把元组组成的Series,转化位dataframe即可

def  calculate_PE(x1,x2,...)
    计算
    ...
    return pe_static,pe_TTM,pe_TR
主程序
...
# 把市盈率(PE)和基本面数据拼接
pe=df_code.apply(lambda row:calculate_PE((x1,x2,...),axis=1)

df_pe=pd.DataFrame(tuple(pe.values),columns=["pe_static","pe_TTM","pe_TR"],index=pe.index)
df['pe_static']=df_pe["pe_static"]
df['pe_TTM']=df_pe["pe_TTM"]
df['pe_TR']=df_pe["pe_TR"]

这样就成功了,注意index=pe.index ,可以保证按index序匹配,不建议省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhyuli

您的鼓励是对我付出努力一种赞赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值