点击上方蓝字,关注并星标,和我一起学技术。

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

在上一篇文章当中,我们介绍了panads的一些计算方法,比如两个dataframe的四则运算,以及dataframe填充Null的方法。今天这篇文章我们来聊聊dataframe中的广播机制,以及apply函数的使用方法。

dataframe广播

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

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


在上面这个例子当中我们创建了一个numpy的数组,然后减去了它的第一行。我们对比下最后的结果会发现,arr数组当中的每一行都减去了它的第一行。

同样的操作在dataframe也一样可以进行。


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


函数与映射

pandas的另外一个优点是兼容了numpy当中的一些运算方法和函数,使得我们也可以将一些numpy当中的函数运用在DataFrame上,这样就大大拓展了使用方法以及运算方法。

比如我们要将DataFrame当中所有的元素变成它的平方,我们利用numpy的square方法可以很容易做到:


我们可以将DataFrame作为numpy函数的参数传入,但如果我们想要自己定义一个方法并且应用在DataFrame上怎么办?

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

比如我们想要对DataFrame进行平方操作,我们也可以将np.square函数当做参数传入。


apply方法除了可以用在一整个DataFrame上之外,我们也可以让它应用在某一行或者是某一列或者是某一个部分上,应用的方法都是一样的。比如我们可以这样对DataFrame当中的某一行以及某一列应用平方这个方法。


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


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

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


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


最后我们来介绍一下applymap,它是元素级的map,我们可以用它来操作DataFrame中的每一个元素。比如我们可以用它来转换DataFrame当中数据的格式。


之所以我们叫它applymap而不是map,是因为在Series的方法当中,已经有了map,所以为了区分创建了applymap。

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

总结

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

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、在看、点赞)。

dataframe 一列的不同值_pandas | 详解DataFrame中的apply与applymap方法相关推荐

  1. php插入友情链接,PHP_详解WordPress中添加友情链接的方法,友情链接对于一个每个独立博 - phpStudy...

    详解WordPress中添加友情链接的方法 友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一 ...

  2. mysql 日期比较_详解Mysql中日期比较大小的方法

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2 ...

  3. 详解Mysql中日期比较大小的方法

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2 ...

  4. 详解WordPress中添加友情链接的方法

    详解WordPress中添加友情链接的方法 友情链接对于一个每个独立博客来说可以说是必须的,有不少人选择在侧边栏加入友情链接栏目,但建立一个独立的友情链接页面也是一个不错的选择.用插件可以轻松做到这一 ...

  5. mysql中对比月_详解Mysql中日期比较大小的方法

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2 ...

  6. Excel列宽像素值计算方法详解

    字数不多,全是干货: 心血凝结,全网唯一: 如有帮助,请您点赞: 未经许可,禁止转载! 申明:本文是个人原创,目前只发表于CSDN平台. 前两年基于Apache POI做了个Excel转Html的程序 ...

  7. python3or5的值_详解python中and和or的返回值

    在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. 一.and:>>> 'a' and 'b' ' ...

  8. 详解JavaScript中选取元素的所有方法

    DOM中选取文档元素的方法总共有5种: 1.通过id值. 2.通过name属性值. 3.通过指定的标签名. 4.通过class类. 5.通过css选择器. 下面我就这五种方法详细解释一下吧. 1.通过 ...

  9. html字符串转成数组,图文详解JavaScript中字符串转换为数组的方法

    在前端开发中经常需要使用JavaScript,那你知道怎么将JS字符串转换为数组吗?这篇文章就和大家讲讲JS将字符串转换为数组的方法,感兴趣的朋友可以参考一下,希望可以帮助到你. 之前一篇文章已经给大 ...

最新文章

  1. js 调 CDHtmlDialog API
  2. Flink SQL Client讀取csv中的數據(轉載+總結)
  3. 【渝粤教育】国家开放大学2018年春季 0176-22T电机学(一) 参考试题
  4. 收银系统 mysql数据库_某大型超市收银系统数据库成功恢复
  5. Win10系统怎么锁定IE浏览器主页
  6. WPF中的事件及冒泡事件和隧道事件(预览事件)的区别
  7. Java刺客信条回复生命,刺客信条英灵殿怎么回血 生命值恢复方法介绍
  8. 发布一个mmap的trie_midrmm02_新浪博客
  9. Java和U3D比较,Unity热更方案 ILRuntime 和 toLua的比较
  10. 【数电】(二) 基本逻辑运算与逻辑门电路
  11. 2016 ECCV论文 《Peak-Piloted Deep Network for Facial Expression Recognition》
  12. You have to specify ‘-keep‘ options for the shrinking step
  13. Xcode 使用手册之01 欢迎使用Xcode(Xcode中文文档手册)
  14. Dorado7的初次使用
  15. word图片另存为变黑色_五种方法可将Word文档转换成图片文件
  16. ARCore 使用 SceneForm 框架 —— 三维空间中,通过三个点绘制平面(Plane)
  17. 《谁说大象不能跳舞》值得一读
  18. IT外包项目质量把控
  19. Privacy-Preserving Deep Learning via Additively Homomorphic Encryption
  20. 个人用微信,支付宝在网站收款实现

热门文章

  1. Jquery事件、冒泡、委托与节点
  2. Jquery基础知识
  3. 垃圾回收:引用计数与分代收集机制
  4. vue 组件第一次不渲染问题_vue使用组件不渲染 只有代码变了才渲染
  5. 【社招/实习】百度大搜索招聘NLP、搜索方向算法工程师!
  6. 别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(2020.4.14更新)...
  7. 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
  8. Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解
  9. 领域应用 | 如何将知识图谱特征学习应用到推荐系统?
  10. 使用numpy实现神经网络模块