pandas一个优雅的高级应用函数!

pandas中4个高级应用函数

applymap:元素级

apply:行列级

transform:行列级

还有另外一个管道函数pipe(),是表级的应用函数。

以下是内容展示

pipe函数介绍

函数:

pipe函数可应用在series和dataframe两个数据结构上。

series.pipe(func, *args, **kwargs)
dataframe.pipe(func, *args, **kwargs)
------

返回:函数的返回类型

参数:

func:用于处理数据的函数,可以是内置函数、库函数、自定义函数或匿名函数
*args:指定传递给函数位置参数
**kwargs:指定传递给函数的关键字

pipe函数应用

一、单个函数

df.pipe(np.exp).pipe(lambda x:round(x,2))

以上pipe分别传入了numpy的exp函数和逆函数,都是单个函数,实现了对数据进行了e次方操作,并结果保留小数点后两位有效数字

在这里插入图片描述

只传入一个函数时,pipe()的效果等同于直接用函数对dataframe处理:func(df),与apply()、applymap()、map()等的处理结果是一样的。

这种基础操作建议优先使用apply()函数pipe()函数的精髓在于链式调用

二、链式调用
我们先用三个函数分别对dataframe操作。

df_01 = np.square(df)
df_02 = np.multiply(df_01, 1.5)
df_03 = np.add(df_02, 8)

三个函数按顺序依次对dataframe操作,第一个函处理后的结果返回给第二个函数,第二个给第三个。如果想省略临时的dataframe也可以将函数像下面这样套用一行代码解决。

rlt = np.add(np.multiply(np.square(df), 1.5), 8)

但上面的写反可读性太差了,一点不优雅,而且随着嵌套增多非常容易看错。这种情况就该pipe()管道函数登场了。

pi = df.pipe(np.square). \
        pipe(np.multiply, 1.5). \
        pipe(np.add, 8) 

或者

pi = (df.pipe(np.square)
        .pipe(np.multiply, 1.5)
        .pipe(np.add, 8))

在这里插入图片描述

pipe链式调用的原理是:

pipe将每次执行完的函数结果传递给下一个函数,即上个输出作为下个函数的输入,以此类推像链子一样可以一直传递下去,这也是管道函数名字的由来。

这样做的优点是:

执行顺序一目了然,逻辑清晰

可读性很高

非常优雅

三、特殊传参方式
pipe()默认情况下会将dataframe传给调用函数的第一个参数,但一些函数在定义时第一个参数并不是用来接收dataframe输入数据的,如果直接将函数传到pipe()中会提示报错。

为了解决这个问题,pipe()中规定了一种特殊的参数传递方法,是元组(callable, data_keyword)的形式

callable:指定在pipe()中调用的函数

data_keyword:指定将dataframe传给函数中的哪一个参数

def spcl(num, df):
    return df.add(num)
df.pipe((spcl,'df'), 2)

以上pipe()中用**(spcl,‘df’)代替了常规时的函数spcl**,清楚地指明了函数中的df参数是接受dataframe数据的参数,这样就不会报错。此外,函数的*args和kwargs传递方式不变**。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值