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

共 2545字,需浏览 6分钟

 ·

2023-09-05 10:57




pandas中4个高级应用函数




  • applymap:元素级


  • apply:行列级


  • transform:行列级


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


以下是内容展示,完整数据、和代码可戳👉《pandas进阶宝典V1.1.6》进行了解。


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传递方式不变。


推荐阅读:


pandas实战:出租车GPS数据分析


pandas实战:电商平台用户分析


pandas 文本处理大全


pandas分类数据处理大全


pandas 缺失数据处理大全


pandas 重复数据处理大全





浏览 636
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报