> 文档中心 > pandas数据处理三大重要函数之apply、map与applymap

pandas数据处理三大重要函数之apply、map与applymap

python数据分析集合:

1、python之Numpy知识点详细总结

2、python最最最重要的数据分析工具之pandas

3、pandas之表连接与高级查询

在这里插入图片描述

今天学习pandas中三大映射函数map()、apply()函数、applymap()函数及numpy中的np.where()函数,它们之间都有着类似的作用。

# 导入库import pandas as pdimport numpy as np

1、Series.map()

map()的参数可以传入一个lambda表达式或者一个自定义函数;结果输出的是Series;针对的是DataFrame的某一行或某一列即Seies进行处理; Series.map()
df = pd.DataFrame({    '姓名':['王一','李二','张三','赵四'],    '性别':['男','女','男','女'],    '班级':['一班','二班','一班','二班'],    '分数':[89,99,76,67]}) df2 = df.copy()  #拷贝一份,免得破坏原数据,后面也需要使用原数据# 把性别男—女用1—0表示# 创建函数:性别若是男返回1,若是nv返回0def sex(x):    if x == '男': return 1    else: return 0# a、直接传入自定义函数进行映射匹配 Series.map(函数名)# df2['性别'] = df2['性别'].map(sex)# b、传入lambda表达式 lambda 变量:函数 ; # 利用lambda的时候对函数需传参 如sex(参数)#df2['性别'] = df2['性别'].map(lambda x:sex(x))df2['性别'] = df2['性别'].map(lambda x:1 if x=='男' else 0) #三元表达式df2

pandas数据处理三大重要函数之apply、map与applymap

2、Series.apply(function,args=(函数的其他参数,))

- 与map函数类似,都有以下特点:    - apply的参数可以传入一个lambda表达式或者一个自定义函数;    - 结果输出的是Series;    - 针对的是DataFrame的某一行或某一列即Series进行处理; Series.apply()- 不同的是:- apply可以传入更复杂的函数(多个参数),而map不可以
例子:现在我们想知道学生分数是高于平均分还是低于平均分,求出分数与平均分的差距。从例子来看,我们需要传入两个参数:学生分数和平均分,map()只能输入一个参数,而apply可以输入多个参数。
df3 = df.copy()    # 单个参数的话与map()函数完全一致#df3['性别'] = df3['性别'].apply(lambda x: 1 if x == '男' else 0)df3['性别'] = df3['性别'].apply(sex) # 传入两个参数:学生分数和平均分 def score(x,avg):    return x-avg# apply(score,args=(平均分,)) 平均分可以用np.mean(df3['分数']) 或 df3['分数'].mean()df3['分数差'] = df3['分数'].apply(score,args=(np.mean(df3['分数']),))df3['平均分'] = df3['分数'].mean()  # 求平均分方面后边对比df3

pandas数据处理三大重要函数之apply、map与applymap

3、DataFrame.applymap()

applymap虽说是apply和map的结合,但其针对对象不同,它是针对dataframe的所有单元格进行操作的 即dataframe.applymap()
df4 = df.copy()df4.applymap(sex)# 从图中可以看出 该函数对表格所有值都进行了0—1转换

pandas数据处理三大重要函数之apply、map与applymap

4、numpy.where()

np.where(条件,True返回值,False返回值)   类似excel中的if()语句 对于Series和DataFrame都可以进行处理但输出的是数组
# 直接传入df3表, 针对的就是整张表格np.where(df3=='男','1','0')  # 从结果看出,输出的是数组array类型 

pandas数据处理三大重要函数之apply、map与applymap

df5 = df.copy()# 传入的是某一列的话,其他值就不改变 print(np.where(df5['班级']=='一班','class1','class2'))  # 数组df5['班级'] = np.where(df5['班级']=='一班','class1','class2') # 在原数据上直接改变df5

pandas数据处理三大重要函数之apply、map与applymap

5、总结:apply、map、applymap、np.where的区别

函数 说明
map(函数) 传入自定义函数(不需要传参) 或 lambda表达式+函数(需要传参) 针对Series
apply(函数,args=(,)) 自定义函数只有一个参数时与map一样,有多个参数时,args就是传入其他参数的入口 针对Series
applymap(函数) 与map和apply一致,只是针对的时DataFrame整张表所有数据
np.where(条件,True返回值,False返回值) 与excel的if函数一样, 若条件为真,返回值1,不为真,返回值2

我觉得,这四个函数中,applymap函数使用频率不太高;最常用的是map和apply,单参数时选用map或apply,多参数时选用apply;np.where既可以针对Series也可以DataFrame,对于两个返回值的时候还是比较好用的,但多于两个返回值可能就麻烦点了吧。

中国象棋