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)

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值