在pandas中进行数据分析,面对复杂的数据处理需求时经常会创建自定义函数来进行数据处理。那么,自定义函数在pandas中如何使用呢?
一、创建自定义函数
示例:计算BMI指数
# 实现计算BMI指数:体重/身高的平方(kg/m^2)
def bmi(weight,height):
return weight/((height/100)**2)
二、使用自定义函数
pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。DataFrame中 apply的工作方式为,先通过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 ,表示处理的是每一行;
raw ;bool 类型,默认为 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)})
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进行投诉反馈,一经查实,立即删除!