2.2.10 高级函数apply - 图1```python import pandas as pd position = pd.read_csv(‘position.csv’) company = pd.read_csv(‘company_sql.csv’,encoding=’gbk’)

position.avg + ‘k’;这样会报错因为前边是float,后边是str

把float转换为str之后再进行字符串拼接

astype转换字符串数据类型

position.avg.astype(str)+’k’

apply即可以针对series,也可以针对dataframe

匿名函数,输入x,输出str(x)+’k’

输入的值就是position.avg数组里面的每个值

apply就是把后边的函数运用在这个数组的每个值上

(1)(2)两个函数等价:

(1) position.avg.apply(lambda x:str(x)+’k’) (2) def func(x): return str(x)+’k’ position.avg.apply(func)

甚至可以在定义的函数里进行逻辑判断

本身想要实现这个功能,可能需要过滤、赋值,也可能使用bins(分组),但是apply的使用会更加清晰

def func(x): if x>20:return ‘20k+’ else:return ‘0~20k’ position.avg.apply(func)

把avg删掉,position.apply(func)会报错,因为series是具体针对里面的某个值,但是是数据框的话,会针对所有切出来的元素去应用,则报错

axis=0就是说把函数运用在每一列;axis=1则是说把函数运用在每一行

def func(x): if x.avg>20: return ‘20k+’ else: return ‘0~20k’ position.apply(func,axis=1)

依然是进行一个判断,这里的变化是x变为了x.avg

虽然我们是针对的行,但是行对我们来说,输入的依旧是个series

但是我们把axis=0改成了axis=1,就变成了逐行,就是说每一行都会去应用,但行里面会有很多的列、字段,所以这时候我们输入给func的是一个series(一维数组)

当把这个一维数组输入进去的时候,一定要指明x.avg,要不然很容易报错

这时候输入的是series,所以在进行判断的时候,要把series里面薪资提取出来,否则还是会有错误

axis=0针对列也一样,可能就是具体的某一个列相关的字段

position.iloc[0]

可读性更好

def func(x): if x>20: return ‘20k+’ else: return ‘0~20k’

匿名函数里面x,指的是series

position.apply(lambda x:func(x.avg),axis=1)

进行平方处理

position.avg.apply(lambda x:x*x) ``` apply就是熟能生巧,后续把目光放在apply的分组上面