pandas中进行数据分析,面对复杂数据处理需求时经常会创建自定义函数来进行数据处理。那么,自定义函数在pandas如何使用呢?
一、创建自定义函数
在这里插入图片描述
示例计算BMI指数

# 实现计算BMI指数:体重/身高的平方(kg/m^2)
def bmi(weight,height):
    return weight/((height/100)**2)

二、使用自定义函数
pandasapply() 函数可以作用于 Series 或者整个 DataFrame功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。DataFrameapply工作方式为,先通过axis参数,按行/列将DataFrame切片一行/列的Series放入元组然后使用底层的C语言实现高效的元组遍历
官方上给出的 apply() 用法
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds
func 代表的是传入的函数或 lambda 表达式

axis 参数可提供的有两个,该参数默认为0/列
0 或者 index表示函数处理的是每一列;
1 或 columns ,表示处理的是每一行;

rawbool 类型默认为 False;
False ,表示把每一行或列作为 Series 传入函数中
True,表示接受的是 ndarray 数据类型

apply() 最后的是经过函数处理,数据以 Series 或 DataFrame 格式返回
axis参数
axis参数指的是“切片方向”而不是“应用方向”。因此axis=0表示沿着0轴方向切片即按列切片axis=1表示沿着1轴方向切片即按行切片
在这里插入图片描述
apply参数传递

DataFrame中 apply工作方式为,先通过axis参数,按行/列将DataFrame切片成一行/列的Series,放入元组然后元组中的元素(各行/列切片形成的Series)传入要应用的函数func。当要应用的函数func只有一个函数时写成apply(func)和apply(lambda x:func(x))效果是一致的。但是当func多个参数时,只能写成apply(lambda x:func(x,y,z))。同时使用lambda函数也增加了func参数的灵活性,使的func参数不局限与一整行/列形成的Series。但是lambda 改变了apply函数的作用域需要注意

随机生成一组数据

import pandas as pd
import numpy as np
df=pd.DataFrame({"id":np.arange(100),
                 "height":np.random.randint(160,190,100),
                "weight":np.random.randint(60,90,100)})

然后应用自定义的BMI函数计算行数据的BMI。

df['bmi']=df.apply(lambda x:bmi(x['weight'],x['height']),axis=1)

常用语法如下

df.apply(lambda x: func(x['col1'],x['col2']),axis=1)

参考链接
1、https://zhuanlan.zhihu.com/p/407911448
2、https://zhuanlan.zhihu.com/p/444575338

原文地址:https://blog.csdn.net/weixin_44100044/article/details/129704556

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45782.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注