Pandas中的宝藏函数-map

AI入门学习

共 3323字,需浏览 7分钟

 · 2021-07-28

pandas中的map类似于Python内建的map()方法,pandas中的map()方法将函数、字典索引或是一些需要接受单个输入值的特别的对象与对应的单个列的每一个元素建立联系并串行得到结果。


这里我们想要得到gender列的F、M转换为女性、男性的新列,可以有以下几种实现方式

先构造一个数据集


map()函数可以用于Series对象或DataFrame对象的一列,接收函数作为或字典对象作为参数,返回经过函数或字典映射处理后的值。

 

用法:Series.map(arg, na_action=None)

参数:

arg : function, dict, or Series

  Mapping correspondence.

na_action : {None, ‘ignore’}, default None

  If ‘ignore’, propagate NaN values, without passing them to the mapping

  correspondence.

返回:Pandas Series with same as index as caller

官方:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html

 


首先构建一个数据集,下面进行案例应用

data = pd.DataFrame({"name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],"gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],"age":[25, 34, 49, 42, 28, 23, 45, 21, 34, 29]}                     ) data name gender  age0   Jack      F   251  Alice      M   342   Lily      F   493  Mshis      F   424   Gdli      M   285  Agosh      F   236   Filu      M   457   Mack      M   218   Lucy      F   349   Pony      F   29

 

1 字典映射

这里我们编写F、M与女性、男性之间一一映射的字典,再利用map()方法来得到映射列:

#定义F->女性,M->男性的映射字典gender2xb = {'F': '女性', 'M': '男性'}
#利用map()方法得到对应gender列的映射列data.gender.map(gender2xb)0 女性1 男性2 女性3 女性4 男性5 女性6 男性7 男性8 女性9 女性

 

2 lambda函数

这里我们向map()中传入lambda函数来实现所需功能:

#因为已经知道数据gender列性别中只有F和M所以编写如下lambda函数
data.gender.map(lambda x:'女性' if x == 'F' else '男性')0    女性1    男性2    女性3    女性4    男性5    女性6    男性7    男性8    女性9    女性
#年龄的平方data.age.map(lambda x: x**2)0 6251 11562 24013 17644 7845 5296 20257 4418 11569 84

 

常规函数

map函数,也可以传入通过def定义的常规函数,看看下面的案例

#性别转换def gender_to_xb(x):    return '女性' if x == 'F' else '男性'    data.gender.map(gender_to_xb)0    女性1    男性2    女性3    女性4    男性5    女性6    男性7    男性8    女性9    女性

 

4 特殊对象

map()可以传入的内容有时候可以很特殊,如下面的例子:一些接收单个输入值且有输出的对象也可以用map()方法来处理:

data.gender.map("This kid's gender is {}".format)0    This kid's gender is F1    This kid's gender is M2    This kid's gender is F3    This kid's gender is F4    This kid's gender is M5    This kid's gender is F6    This kid's gender is M7    This kid's gender is M8    This kid's gender is F9    This kid's gender is F


map()中的参数na_action,类似R中的na.action,取值为None或ingore,用于控制遇到缺失值的处理方式,设置为ingore时串行运算过程中将忽略Nan值原样返回。


s = pd.Series(['cat', 'dog', np.nan, 'rabbit']) s0      cat1      dog2      NaN3   rabbit

na_action为默认值的情况

s.map('I am a {}'.format)0       I am a cat1       I am a dog2       I am a nan3    I am a rabbit

na_action为ignore的情况

s.map('I am a {}'.format, na_action='ignore')0     I am a cat1     I am a dog2            NaN3  I am a rabbit

···  END  ···
推荐阅读:
一、Number(数字)
全面掌握Python基础,这一篇就够了,建议收藏
Python基础之数字(Number)超级详解
Python随机模块22个函数详解
Python数学math模块55个函数详解
二、String(字符串)
Python字符串的45个方法详解
Pandas向量化字符串操作
三、List(列表)
超级详解系列-Python列表全面解析
Python轻量级循环-列表推导式
四、Tuple(元组)
Python的元组,没想象的那么简单
五、Set(集合)
全面理解Python集合,17个方法全解,看完就够了
六、Dictionary(字典)
Python字典详解-超级完整版
七、内置函数
Python初学者必须吃透这69个内置函数!
八、正则模块
Python正则表达式入门到入魔
笔记 | 史上最全的正则表达式
八、系统操作
Python之shutil模块11个常用函数详解
Python之OS模块39个常用函数详解
九、进阶模块
【万字长文详解】Python库collections,让你击败99%的Pythoner
高手如何在Python中使用collections模块

扫描关注本号↓

浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报