pandas apply执行函数3点注意

pandas apply执行函数3点注意

import pandas as pd


data=pd.DataFrame({'name':['张三','李四','王五'],'age':[18,19,20],'number':[190,200,220]})

print(data)
#
    name  age    number
0   张三   18     190
1   李四   19     200
2   王五   20     220

使用apply可以将df中指定的列全部执行该函数并返回结果
需要注意的有3点:

1.函数传入的执行对象
要对df中的某列执行函数,那函数执行的对象自然是该列,但是函数怎么知道是该列的数据呢。
apply默认对第一个参数视为传入的该列的值。所以定义函数时,随便加一个参数就可以了,然后在函数内部使用该参数进行计算。

def improve(num): #让该列每个值-100
    return num-100

2.函数带多个参数
apply传入的参数是函数名称,如果函数带多个参数怎么办?apply给了一个args这个关键字参数,后面接一个元组,把需要传入的参数加进去,此时传入的元组不用算第一个参数,这也是一般常见的传参模式,类似Threading一样。

def improve(num,b):
    return num-100+b

data['number'].apply(improve,args=(10,))

3.函数执行后的结果
执行apply后是有返回值的,返回的是传入数据的计算结果而不是原数据 ,既然有返回值,那么对于python语法一般是原数据不会被更改的,所以如果指定某列apply执行函数后,我们常见的写法有两种:
一种是在原数据新增一列,把该结果加进去:(强烈推荐,因为万一算错误了不需要重来,而且可以对比结果)

data['new_number']=data['number'].apply(improve,args=(10,))
print(data)
#
    name  age    number    new_number
0   张三   18     190         100
1   李四   19     200         110
2   王五   20     220         130

还有一种是将计算后的结果重新覆盖原列 (不推荐)

data['number']=data['number'].apply(improve,args=(10,))
print(data)
#
    name  age   number
0   张三   18     100
1   李四   19     110
2   王五   20     130

完整代码:

import pandas as pd


data=pd.DataFrame({'name':['张三','李四','王五'],'age':[18,19,20],'number':[190,200,220]})
print(data)

def improve(num,b):
    return num-100+b

data['new_number']=data['number'].apply(improve,args=(10,))
#data['number']=data['number'].apply(improve,args=(10,))
print(data)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值