pandas技巧之 详解DataFrame中的apply与applymap方法

pandas技巧之  详解DataFrame中的apply与applymap方法

相关学习推荐:python视频教程

今天是pandas数据处理专题的第5篇文章,我们来聊聊pandas的一些高级运算。

在上一篇文章当中,我们介绍了panads的一些计算d = g Y B [ : Q b方法,比如两个7 I S + Ddataframe的四则运算,以及dataframe填充Null的方法。今天这篇文章我们来聊聊dataframe中的广播机制,以及apply函数的使用方法。

dataframe广播

广播机制我们其实并不陌生, 我们在之前介绍numpy的专题文章当中曾经介绍过广播。当我们对两个尺寸不一致的数W t V组进行运算的时候,系统会自动将其中维度较小的那个填充成和另外一个一样K p g H D 3 V G再进行计算。

比如我们将一个二维数组减去一个一维数组,numpy会先将一位数组拓展到二维之后再进行减法运算。看起来就像是二维数组的每一行分别减去了这一个一维数组一样。可以理解成我们将减去H V U这一= h U I f S个一维数组的操作广播到了二维数组的每一行或者是每一列当中。

pandas技巧之  详解DataFrame中的apply与applymap方法

在上面这个例子当中我们创建了一个numpy的数组,然后减去了它 j [ | n T L ! /的第一行。我们对比下最后的结果会发现,arr数组当中的每X A : h C一行都减去了 E g 2 ~ #它的第一行。

同样的操作在datafr+ B T c n } Vame也一样可以进行。

pandas技巧之  详解DataFrame中的apply与applymap方法

我们当然也可以对某一列进行广播,但是dataframe四则运算的广播机制默认对行生效,如果要对列使用的话,我们需要使用算术运算方法,并且指定希望匹配的轴。

pandas技巧之  详解DataFrame中的apply与applymap方法

函数与映射

pam Y 8 C O I ] &ndas的另外一个优点是兼容了numpy当中的7 3 W @一些运算方法6 = : r K和函 c F K U o b数,使得我们也可以将一些numpy当中的函数运用在Dati [ l 7 b u w Q caFrame上,这样就大大拓^ ? h展了使用方法以及运算方法。

比如我们要将Dat? | N QaFraI , c 4 ? - . | Zme当中所有的元素变成它的平方,我们利用numpy的square方法可以很容易做到:

pandas技巧之  详解DataFrame中的apply与applymap方法

我们可以将DataFrameR 3 J a 1 d f B [作为numpy函数的参数传入,但如果W % / $ Q f我们想要自己定义一个方法并且应用在DataFrame上怎么办?

我们可以利用apply方法很容易地实现这一点,apply方法有些像是Python原生的map方法,可以对DataFrame当中的每一个元素做一个映射计算。我们只需要在apply方法当中传入我们想要应用在DataFrame上的方法即可,也就是说它接受的参数是一个函数i } V [ `,这是一个很典型的函数式编程的应用。

比如我们想要+ + b k : o 3对DataFrame进行平方操作3 B M,我们也# , X Q可以将np.square函数当做参数传入。

pandas技巧之  详解DataFrame中的apply与applymap方法

a} { N Wpply方法除了可以用在一整个DataFrams s 5 L G te上之外,我们也可以让它应用在某一行或者是某一列或者是某一个部分上,应用的方法都是一样的。比如我们可以这样对DataFrame当中的某一行以及某一列应用平方这个方法。

pandas技巧之  详解DataFrame中的apply与applymap方法

另外,apply中函数的作用域并不只局限在元素,我们也可以写9 D e W n { 8 O出作用在一行或者是一列上的函数。比如我们想要计算出DataFrame当中每一列的最大值,我们可以这样写:

pandas技巧之  详解DataFrame中的apply与applymap方法

这个匿名函数当中的x其实是一个Series,那这里的max就是Series自带的max方法。也就是说apply的作用范围是Series,虽然最终的效果是每一个元素S o - s L u n 4 8都被改变了,但是apply的作用域并不是元素而是Series。我们通过apply操作行或者列,行和列将改变应用到每一个元素。

同样我们也可以将apply的应用对象限定为行,同样我们需要通过传入axis来限定,我们可以传入axis='columi 9 / ns',也可以指定axis=1,这两者的效果是一样的。

pandas技巧之  详解DataFrame中的apply与applymap方法

另外,appI ; W # Qly返回的结果并不一定只能是标量,也可以是多个值组成的list或者是Series,其实两者也是一样的,因为即使返回List也会被转化成Series。

pandas技巧之  详解DataFrame中的apply与applymap方法

最后^ v Q J U s m Q W我们来介绍一下aT ~ _ i n s Lpplymap,它是元素级的map,我们可以用它来操作DataFrame中的每一个元素。比如我们可以用它来转换DataFrame当中数据的格式。

pandas技巧之  详解DataFrame中的apply与applymap方法

之所以我们叫它applymap而不是map,是因为w 3 l | t [ n在Series的方法当中,已经有了map,所以为了区分创建了ap# / & @ B 0plymap。

这里要注意,如果将上面代码中的aC ^ spplymap改成apply是会报错的。报错的原因也很简单,因为apply方法的作用域不是元素而是Series,Sj * leries并不支持这样的操作。

总结

- k ; V T U天的文章我们主要k b 8介绍了pandas当中apply与applymap的使用方法, 这两个方法在我们日常操作DataFrame的数据非常常用,可以说是手术刀级的api。熟练掌握对于我们搞定数据处理非常有帮助,如果大家理解Python中原生的map方法的应用,相信一定也可以很顺利地理解今天的文章。

想了解更多编程学f i = m K习,敬请关注php培训栏目!

以上就是pandas技巧之 详解DataFr# Z Pame中的apply与applymap方法的详细内容。

pandas技巧之  详解DataFrame中的apply与applymap方法
dataframe广播函数与映射总G R = L