pandas中map,apply和applymap的用法
作者:互联网
1.map
用于series的一种方法,用于替换掉series中的数值,或者新增一列对应到series的数值
首先建立一个dataframe
import pandas as pd
import numpy as np
music_genre=['hiphop','jazz','pop','funk','rock','classical','r&b','electronic']
city=['广州市','厦门市','深圳市','西安市','武汉市','上海市','成都市','郑州市','重庆市','北京市','天津市']
data=pd.DataFrame({
'gender': [ x for x in np.random.randint(0,2,100)],
'age':np.random.randint(20,80,100),
'city':[city[i] for i in np.random.randint(len(city),size=100)],
'music_genre':[music_genre[x] for x in np.random.randint(len(music_genre),size=100)] })
data
map用于当我们要对Series的每一个数据进行操作时,当对Series中的数据分类处理时候非常方便
此案例中我们可以使用map方法可以新增一列"gender_in_chinese”,对应到原表的gender,0对应女,1对应男,使用字典的方法对应
data['gender_in_Chinese']=data.gender.map({1:'男',0:'女'})
和下面代码等价
def gt(x):
if x==1:
x='男'
else:
x='女'
return x
data['gender_in_Chinese']=data.gender.map(gt)
或者
data['gender_in_Chinese']=data.gender.map(lambda x:'男' if x==1 else '女')
2. apply的用法
2.1用于series
可以对指定列调用函数,可以是简单函数,也可以是自定义的复杂函数,
例如:将data的city列舍弃最后一个字符“市”,只保留前两个字
def cut(str):
return str[:2]
data.city=data.city.apply(cut)
data
另外,apply内的函数可以传入多个参数,假设我们现在需要把age这一列划分为几个区间,20-某个年龄是青年,某个年龄到60属于中年,60-80是老年,那么此时需要两个参数,一个是Series的age,另一个是介于青年和中年的年龄
def age_range(age,x):
if age>20&age<x:
age_range='青年'
elif age<60:
age_range='中年'
else:
age_range='老年'
return age_range
data['age_range']=data.age.apply(age_range,args=(-3,))
结果如下:
2.2 用于dataframe
(1)对每行或者每列起作用,可求每行的和/最大值/平均值等,也可以是其他自定义的函数
例如下面这个DataFrame
我们可以对它求每列的和
求每列的最大值减去最小值
求每列的正数之和
(2)以data为例,apply可以和groupby结合 求出每种性别分类下年龄最大的人
data.groupby('gender')['age'].apply(max)
3.applymap
用于DataFrame,对每个element起作用,常用于数字格式化
例如有这样一个DataFrame,用applymap的方法把数字统一保留两位小数
df.applymap(lambda x:'{:.2f}'.format(x))
或者
df.applymap(lambda x:"%.2f" % x)
结果
标签:map,applymap,city,gender,age,apply,data,pandas 来源: https://blog.csdn.net/MONSTERSU/article/details/112315749