引:对于pandas中的对象DataFrameSeries),可以使用函数元素进行操作。在利用python行数分析一书中,简要介绍了4种方法

1、使用NumPyufuncs元素级数方法用于操作pandas对象

接下来便是今天要说的三个方法:map()、apply()、applymap()

但是以上方法存在速度慢缺陷,我将在后面讨论


一、Seriesmapapply

对于Series来说,有mapapply两种方法,他们作用都是把Series中的值代进函数中去;或者可以认为按Series索引迭代执行函数,

官方文档中对map定义是:

根据输入映射或函数映射序列的值。

用于将序列中每个替换为另一个值,可能派生于函数或一个序列字典

对于apply定义

序列的值调用函数

可以ufunc(适用于整个系列的 NumPy 函数) 或仅适用于单个值的 Python 函数。

例:

除了给入一个lambda函数作为参数,还可以自定义函数作为参数,只要保证自定义函数的参数返回值都是一个。

apply和map两者还是有一些差异,对于map来说,它做的事情就是将原本的值映射(mapping)到另外的值”因此map不但可以接收一个函数,它也可以接受dictionary或另外一个Series,只要是可以一对的就好

如果给定的是dictionary,那么dictionarykeys就相当于函数的输入,而key对应value就相当于函数的输出,所以上面的dic中,1这个key对应value是’a’,所以map后,1就变成’a’了,另一方面,dic中并没有3这个key,所以s1中原本是3的值,但map后就变成了NaN

那如果给定的是Series,概念dictionary相似的,只是函数的输入变成Series的index,函数的输出变成index对应的值,所以s1中,原本为1的值,在map后变成32,因为s1_map中,index=1的值就是32

那对 apply 来说,虽然它没办法像map那样还可以接受dictionary和Series,但是它可以给定额外参数

用法如上图

二、DataFrame:apply、applymap

那对于DataFrame来说,则有apply和applymap可以用。

官方文档对apply的定义

沿DataFrame的一个轴映射函数(理解为对每一行执行函数或某一列执行函数)

参数axis=0(默认值)时,每一行(是一个Series)作为对象传进函数;axis=1时,每一列作为对象传进函数。返回类型与函数返回类型有关,或在参数result_type指定

对applymap的定义

对DataFrame中的元素应用函数

映射的函数接受并返回一个标量元素级)

apply的功能为以行(或列)为单位计算,applymap则是做elementwise计算

另外 apply 可以给定输入函数的额外参数,而 applymap 无法

而因为apply是在做aggregates操作,因此输入的函数应该要为aggregates function,像上面是给定sum,但是如果输入的函数给了ufunc或类似的函数,那apply也会有elementwise的结果

总结

Series中有apply及map,两者功能相似,都是将原本的值转换成另一个值,但是map可以给定functiondictionary、Series,而 apply 只能给定 function,但同时它有 args 可以设定,可以给定输入函数的额外参数

DataFrame中有apply和applymap,apply是针对columnaggregates操作,applymap则是elementwise,但是如果使用apply时,给定的函数是一个ufunc,那么它也会有elementwise的结果

三、apply的速度问题

我在实际使用apply过程发现他的速度很慢其实一开始不知道是因为apply()慢,看了一些资料后才明白)

apply因为执行时候找到函数,而这个函数是python写的,因此会拖慢速度

改善的方法是尽量不用apply,而是执行量化操作(详见参考资料2

其实简单就是使用类似df[‘energy_kwh‘] * price来代替apply的逐行(列、元素操作

举一个例子,要计算体感温度humidex指数(体感温度指数的一种,计算公式链接),需要两个变量温度相对湿度。在DataFrame列中,有’TEM’、’RHU’列分别代表温度相对湿度。

分别使用apply方法和矢量操作在同样的数据花费时间

  1. apply:(1m0.6s)

  1. 矢量操作:(4.9s)

可以看到,矢量化操作速度更快,而apply方法较慢。如果在大数据集上使用了较多apply方法,那花费时间可想而知

创作不易,欢迎点赞收藏、加关注

我的公众号【光阴似贱日月如琐】,欢迎交流

参考资料

  1. (笔记) pandas的map、apply、applymap 作者:已经改掉昵称的米奇

  1. 还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法

  1. 《利用python进行数据分析·第二版》

  1. pandas官方文档(英文)

原文地址:https://blog.csdn.net/weixin_44815511/article/details/129248788

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47086.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注