ITPub博客

首页 > 数据库 > 数据库开发技术 > Pandas中使用apply调用函数

Pandas中使用apply调用函数

原创 数据库开发技术 作者:derekwh 时间:2024-07-21 16:03:17 0 删除 编辑

pandas是一个强大的数据处理库,其中 apply 是一个非常有用的函数,它允许我们对 DataFrame 或 Series 进行自定义操作。 

我们可以用DataFrame的apply函数实现对多列、多行的操作。可通过axis设置参数,设为1是对列进行操作,参数axis设为0是对行操作。apply经常跟lambda一起使用,非常方便,大大提高了效率。

构造数据

import pandas as pd
data = [
    ['张三', '专科', '湖北', '22','2021-06-29'],
    ['李四', '本科', '河北', '23','2022-06-29'],
    ['王五', '硕士', '北京', '29','2019-03-21'],
    ['赵六', '博士', '内蒙', '30','2022-06-25'],
    ['吴七', '本科', '内蒙', '25','2023-06-25'],
    ['范八', '本科', '吉林', '25','2022-06-25'],
    ['陈九', '本科', '湖北', '25','2023-06-25'],
    ['郑十', '本科', '湖北', '25','2022-06-25'],
]

df = pd.DataFrame(data, columns=['姓名', '学历', '籍贯', '年龄','毕业时间'])
df

单列操作

假如我只想知道毕业时间的年份,新增一列数据获取毕业时间的年份。

df['毕业年份']=df['毕业时间'].apply(lambda x :x[:4])
df

多列关联操作

假设有1岗位,需本科以上学历,年龄小于28才能匹配。现在用两种方法来实现这个需求。

方法1

#定义函数
def f(a,b):
    if a in ['本科','硕士','博士']and int(b)<28:
        return '匹配'
    else:
        return '不匹配'
df['是否匹配岗位-方法1']=df.apply(lambda x: f(x['学历'],x['年龄']),axis=1)#axis=1,表示横向,对列进行操作,axis=0表示竖向操作,是增加一行
df

方法2

方法2是更常见的方法,现在用更常见的方法解决这个需求。

def f2(x):
    if x['学历'] in ['本科','硕士','博士'] and int(x["年龄"]) <28:
        return '匹配'
    else:
        return '不匹配'
df['是否匹配岗位-方法2']=df.apply(f2,axis=1)#axis=1,表示横向,对列进行操作,axis=0表示竖向操作,是增加一行
df

方法2是万能方法,对于非常复杂的函数也可以通过方法2的方式实现。

多行关联操作

展示一下行操作,行之间的操作用的较少,这里主要展示与列操作的区别。axis=0与axis=1的区别。

#定义函数
def f3(a,b):
    return a+b
df.loc[6]=df.apply(lambda x: f3(x[1],x[5]),axis=0)#axis=1,表示横向,对列进行操作,axis=0表示竖向操作,增加一行
df

熟悉本文pandas中的apply使用的几个案例,就能很方便地实现pandas数据中的行列变换。

本文参考了我之前的几篇文章,并对内容进一步总结,感兴趣的可以参阅之前的文章。

链接如下:

深入了解Pandas的map、apply、applymap函数

apply函数的用法




原文作者:Python学习杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
央企算法工程师,微信公众号: python数智工坊

注册时间:2021-03-14

  • 博文量
    305
  • 访问量
    162320