一文弄懂Apply、Map和Aplymap三种函数的区别

开发 前端
在日常处理数据的过程中,会经常遇到这样的情况,对一个DataFrame进行逐行、逐列或者逐元素的操作,很多小伙伴也知道需要用到apply、map或者applymap,但是具体什么情况下运用哪种方法或者说对这些方法了解不够,用起来晕晕乎乎始终没有很明白。

 在日常处理数据的过程中,会经常遇到这样的情况,对一个DataFrame进行逐行、逐列或者逐元素的操作,很多小伙伴也知道需要用到apply、map或者applymap,但是具体什么情况下运用哪种方法或者说对这些方法了解不够,用起来晕晕乎乎始终没有很明白,希望这一篇文章能够帮助有需要的小伙伴弄懂他们之间的区别,并且在遇到问题的时候能够很清楚明白用哪个以及该怎样使用。闲话少叙,我们正式开始吧。

[[322964]]

首先,来个总结

  • apply:应用在DataFrame的行或列中,也可以应用到单独一个Series的每个元素中
  • map:应用在单独一个Series的每个元素中
  • applymap:应用在DataFrame的每个元素中

apply

先从apply开始,当然最权威的说明还是要看官方文档:

apply是沿DataFrame的轴应用功能,传递给函数的对象是Series对象,其索引为DataFrame的索引(axis = 0'')或DataFrame的列(axis = 1'')

当然比较常用的还是DataFrame.apply(),下边我们通过例子来说明一下帮助理解.

首先有一个表:

 

一文弄懂apply、map和applymap三种函数的区别

 

apply应用到DataFrame中

如果我们求一下每一列或者每一列的极差,注意axis参数的设置,一般默认为0,即求每一列的极值

 

一文弄懂apply、map和applymap三种函数的区别

 

apply的参数可以直接接收现成的函数,也可以接收自定义函数,比如自定义的匿名函数:

 

一文弄懂apply、map和applymap三种函数的区别

 

通过对轴信息的设置,也可以求每一行的极差:

 

一文弄懂apply、map和applymap三种函数的区别

 

需要注意的是结果的索引,能够很明显的告诉大家现在求的是行极差还是列极差,如果是行极差,索引是行标签,如果是列极差,索引是列名。

另外,对整个DataFrame运用apply的时候,要保证所有的字段都是符合作为参数的函数要求才可以,比如在列子中求极值得保证所有字段都是数值型才行,如果整个DataFrame不能满足要求,可以把符合要求的字段切出来再应用apply。

如果有需要,也可以把求的结果添加到原表当中。

apply应用到Series中

如这个例子,将A列的所有元素转换数据类型,从整型转换成浮点型:

 

一文弄懂apply、map和applymap三种函数的区别

 

总结一下,apply运用到整个DataFrame中可以执行整列或者整行的运算,运用到Series中,执行的是对每个元素的运算。

这个运算,map也可以实现。

map

首先,还是看下官方文档是怎么说的:

  • 根据输入对应关系映射Series的值。
  • 用于将Series中的每个值替换为另一个值,该值可以从函数dict或Series派生。

官方指定,map是应用于Seriesd 的,参数可以是函数也可以字典。

首先,还是要有一个表:

 

一文弄懂apply、map和applymap三种函数的区别

 

现在需要将性别转换成0和1,女为0,男为1,这个时候千万不要写循环啊,map()可以轻松实现,先来试试函数的形式:

def gender(x): G = 1 if x == "男" else 0 return G

 

一文弄懂apply、map和applymap三种函数的区别

 

map的参数除了可以是参数,也可以是字典,这和apply对参数的要求不同:

 

一文弄懂apply、map和applymap三种函数的区别

 

applymap

最后来看一下applymap,还是先搬上官方文档:

  • 将函数应用于元素的数据框。
  • 此方法应用一个函数,该函数接受并返回一个标量到DataFrame的每个元素。

简单说,applymap是把函数应用到DataFrame中的每个元素上的,要和apply对整列或者整行进行的操作区分开啊,apply想要直接对每个元素进行操作,得单独提取出Series才可以实现,不能直接再整个DataFrame上执行。下边来看个例子。

还是开头的那个表:

 

一文弄懂apply、map和applymap三种函数的区别

 

现在要把每个元素的数据类型都转换成浮点型,applymap()就派上用场了:

 

一文弄懂apply、map和applymap三种函数的区别

 

最后再总结一下:

apply:

  • 既可以用在DataFrame,也可以用到单独的Series中
  • 运用到DataFrame时,是用到了整行或者整列上,不是逐一运用到每个元素上
  • 运用到Series时,作用到每个元素上
  • 第一个参数只接收python原生函数或者numpy中的函数

map

  • 只能运用到Series的每个元素上
  • 参数可以是函数也可以是字典,还可以是序列

applymap

  • 只能应用在DataFrame中,并且是作用在DataFrame的每个元素中
  • 参数只接收可调用的函数

常用的用法呢就是前边举的例子中的那些了,希望这边文章能帮助大家分清apply、map和applymap并能灵活运用它们。

责任编辑:华轩 来源: 今日头条
相关推荐

2020-11-24 10:13:02

Redis集群数据库

2022-08-09 09:10:43

Kubernetes容器

2023-11-28 09:31:55

MySQL算法

2023-03-30 08:52:40

DartFlutter

2023-03-27 17:58:34

MySQL加锁间隙锁

2021-06-02 05:43:36

比特币虚拟货币区块链

2022-03-01 20:41:00

机器学习特征人工智能

2023-10-26 16:27:50

前端 WebCSS开发

2023-09-18 08:02:45

CSS布局属性

2022-08-03 08:01:16

CDN网站服务器

2023-12-12 07:31:51

Executors工具开发者

2022-09-01 08:01:56

Pythongunicorn

2023-07-25 09:53:00

LGACPU数字

2017-07-28 09:11:14

HIVEHBASE区别

2023-04-04 08:01:47

2022-09-05 09:25:53

KubernetesService

2021-12-20 07:59:07

Go语言结构体

2022-01-04 08:54:32

Redis数据库数据类型

2020-09-04 06:35:28

Redis复制哨兵

2021-07-05 00:00:55

TomcatNginxApache
点赞
收藏

51CTO技术栈公众号