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 

pandas中map,apply和applymap的用法

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 '女')

pandas中map,apply和applymap的用法

2. apply的用法

2.1用于series

可以对指定列调用函数,可以是简单函数,也可以是自定义的复杂函数,

例如:将data的city列舍弃最后一个字符“市”,只保留前两个字

def cut(str):
    return str[:2] 
    data.city=data.city.apply(cut) 
data 

pandas中map,apply和applymap的用法

另外,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,))

结果如下:
pandas中map,apply和applymap的用法

2.2 用于dataframe

(1)对每行或者每列起作用,可求每行的和/最大值/平均值等,也可以是其他自定义的函数
例如下面这个DataFrame
pandas中map,apply和applymap的用法
我们可以对它求每列的和
pandas中map,apply和applymap的用法

求每列的最大值减去最小值
pandas中map,apply和applymap的用法

求每列的正数之和
pandas中map,apply和applymap的用法

(2)以data为例,apply可以和groupby结合 求出每种性别分类下年龄最大的人

data.groupby('gender')['age'].apply(max)

pandas中map,apply和applymap的用法

3.applymap

用于DataFrame,对每个element起作用,常用于数字格式化
例如有这样一个DataFrame,用applymap的方法把数字统一保留两位小数
pandas中map,apply和applymap的用法

df.applymap(lambda x:'{:.2f}'.format(x))

或者

df.applymap(lambda x:"%.2f" % x)

结果
pandas中map,apply和applymap的用法

上一篇:050.JAVA线程_线程通信的实现和死锁现象


下一篇:Json概念与基本语法