最近,又发现了 Pandas 中三个好用的函数
作者 | luanhz
来源 | 小数志
导读
近日,在github中查看一些他人提交的代码时,发现了Pandas中这三个函数,在特定场景中着实好用,遂成此文以作分享。
程序的基本结构大体包含三种,即顺序结构、分支结构和循环结构,其中循环结构应该是最能体现重复执行相同动作的代码控制语句,因此也是最必不可少的一种语法(当然,顺序和分支也都是必不可少的- -!)。虽然Pandas中提供了很多向量化操作,可以很大程度上避免暴力循环结构带来的效率低下,但也不得不承认仍有很多情况还是循环来的简洁实在。
因此,为了在Pandas中更好的使用循环语句,本文重点介绍以下三个函数:
iteritems
iterrows
itertuples
当然,这三个函数都是面向DataFrame这种数据结构的API,所以为了便于后文介绍三个函数,构造以下DataFrame实例:
01 iteritems
首先介绍iteritems。我们知道,Pandas中的DataFrame有很多特性,比如可以将其视作是一种嵌套的字典结构:外层字典的key为各个列名(column),相应的value为对应各列,而各列实际上即为内层字典,其中内层字典的key即为行索引,相应的value则为对应取值。所以,对于一个DataFrame,我们可以方便的使用类似字典那样,根据一个列名作为key来获取对应的value值,例如在上述DataFrame中:
当然,这是Pandas中再基础不过的知识了,这里加以提及是为了引出DataFrame的下述API:即,类似于Python中字典的items()方法可以返回所有键值对那样,DataFrame也提供了items方法,返回结果相信也正是猜测的那样:
当然,返回的结果是一个生成器(生成器是Python3中的一个重大优化,尤其适用于在数据量较大时提供memory-efficient的遍历)。我们可以将其强制转化为一个列表,并进而得到如下结果:
那么,DataFrame的items方法与这里要讲的iteritems方法有什么关系呢?在我初次看到这两个API时,直觉想法就是items显式的以列表形式返回各个item信息,而iteritems则以迭代器的形式返回各个item信息。但后来发现,实际上items()的返回值也是一个迭代器。进一步的,查看函数签名文档,发现二者其实就是一致的,甚至连iteritems文档中的example都用的items。
iteritems的更多文档部分可自行查看
笔者猜测,可能是在早期items确实以列表形式返回,而后来优化升级为以迭代器形式返回了。不过在pandas文档中简单查阅,并未找到相关描述。
那么,说了这么多,iteritems到底有什么用呢?我个人总结为如下几个方面:
方便的以(columnName, Series)元组对的形式逐一遍历各行进行相应操作
以迭代器的形式返回,在DataFrame数据量较大时内存占用更为高效
另外,items是iteritems的同名函数,二者在功能上目前已无差别
02 iterrows
在前面介绍了iteritems的基础上,这里介绍iterrows就更加简单了。如果说iteritems是对各列进行遍历并以迭代器返回键值对,那么iterrows则是对各行进行遍历,并逐行返回(行索引,行)的信息。
首先来看函数的签名文档:
而后,仍以前述DataFrame为例,查看其返回结果:
这里仍然显式转化为list输出
结果不出所料:返回结果包含5个元组对,其中各元组的第一个值为相应的行索引,第二个值为对应行的Series格式。不过细看之下,其中有一个细节不容忽视:即各行对应Series的dtype均为object。在Pandas中,object往往是由于该行的数据类型存在多种类型而向上兼容为object。那么这里为何出现这样的结果呢?实际上,在iterrows的函数签名文档中给出了相应的解释:
函数签名文档中的示例,由于两列的原始数据类型分别为int和float,所以经过iterrows遍历后,返回的各行Series中数据类型变为float64型,而在本文的示例DataFrame中,由于三列信息分别为int、float和object,所以最终返回的Series数据类型即为更通用的泛型:object。
示例DataFrame的各列信息
那么,如果想要保留DataFrame中各列的原始数据类型时,该如何处理呢?这就需要下面的itertuples。
03 itertuples
在介绍itertuples之前,需要首先科普一下Python中预置的一种数据结构,namedtuple:
实际上,namedtuple是一个继承自tuple的子类,区别在于namedtuple除了可以使用索引来访问各元素取值外,还支持以各位置的'name'来访问元素(类似于C语言中的结构体类型),或者说namedtuple可以很方便的无缝转换为dict。
以此为基础,为了弥补iterrows中可能无法保留各行Series原始数据类型的问题,itertuples以namedtuple的形式返回各行,并也以迭代器的形式返回,以便于高效遍历。仍然来看函数签名文档:
而后,再看上述DataFrame调用itertuples后的返回结果:
其中,返回值包含5个namedtuple,这里每个namedtuple都被命名为Pandas,这可以通过itertuples中的name参数加以修改;另外,注意到在每个namedtuple都包含了4个元素,除了A、B、C三个列取值外,还以index的形式返回了行索引信息,这可以通过itertuples中的index参数设置保留或舍弃。
由于行索引作为namedtuple中可选的一部分信息,所以与iteritems和iterrows不同,这里的返回值不再以元组队的形式显示行索引信息。
04 小结
以上就是本文分享的Pandas中三个好用的函数,其使用方法大体相同,并均以迭代器的形式返回遍历结果,这对数据量较大时是尤为友好和内存高效的设计。对于具体功能而言:
iteritems是面向列的迭代设计,items函数的功能目前与其相同;
iterrows和itertuples都是面向行的迭代设计,其中iterrows以元组对的形式返回,但返回的各行Series可能无法保留原始数据结构类型;而itertuples则以namedtuple形式返回各行信息,行索引不再单独显示而是作为namedtuple中的一项,并可通过itertuples参数加以设置是否保留。
往
期
回
顾
资讯
冬奥会夺金背后的杀手锏,是他
技术
用python绘制动态可视化图表
技术
在 Python 中妙用短路机制
资讯
M2芯片终于要来了?全线换新
分享
点收藏
点点赞
点在看
相关文章:

Java Web的Maven项目中Properties文件的使用(2)
为什么80%的码农都做不了架构师?>>> 背景 Java Web中常用一些Properties文件进行部署配置,其中如果在里面配置OS的路径,需要跨平台,主要就是考虑win系统的路径是“\”,而Linux的路径是“/”。 …

TCP/IP 计算机网络协议
2019独角兽企业重金招聘Python工程师标准>>> 应用层: (典型设备:应用程序,如FTP,SMTP ,HTTP) DHCP(Dynamic Host Configuration Protocol)动态主机分配协议,使用 UDP 协议工作,主要有两个用途:给…

5分钟速通 AI 计算机视觉发展应用
作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 计算机视觉是进步最大、发展最快的领域之一。根据 Global VIEW 的研究,全球计算机视觉市场规模在 2020 的价值为 113 亿 2000 万美元,预计从2021 到 2028 的复合年增长率为 7.3%…

javascript解析json
下载json库 http://www.json.org/json-zh.html自己找javascript的 或者直接去下面的 https://github.com/douglascrockford/JSON-jsphp生成json格式使用页面 <script src"scripts/json.js"></script>alert(data.toJSONString());如果返回false说明没数据…
高德联手凯迪拉克 发布全球首个高精地图应用
6月13日,在CES ASIA活动现场,上汽通用汽车凯迪拉克超级智能驾驶系统(Super CruiseTM)在国内首发亮相,未来将搭载在凯迪拉克CT6 40T铂金版车型上推向市场。高德地图作为上汽通用汽车在华合作伙伴,将为超级智…

WinDbg安装与使用
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 主页:http://msdn.microsoft.com/en-us/windows/hardware/gg463016 下载链接:http://msdl.microsoft…

mysql-5.6 升级 5.7
#准备工作 1、停机 [rootlocalhost local]# /etc/init.d/mysqld stop Shutting down MySQL.. [确定]2、切换版本 [rootlocalhost local]# mv /root/mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz ./mysql-5.7 [rootlocalhost local]# ln -s…

让假图无所遁形,阿里篡改图像检测大赛集结号令打响
近年来,伴随多媒体技术的迅速发展,图像安全隐患随之而来。一些不法分子通过伪造或恶意篡改证件、政府文件、转账记录截图等方式,不仅进行诈骗活动,还带来一些社会问题:2 月 10 日,广西柳州融水苗族自治县赵…

Apache网页优化之网页压缩
Apache网页压缩技术 实验介绍:本实验在虚拟机的Linux系统上搭建http-2.4.2,并在配置过程中开启mod_deflate模块,实现网页的压缩功能,最终通过fiddler抓包工具,验证mod_deflate压缩是否生效。 1、首先将搭建httpd服务所需要的软件包…

推荐阅读的多核编程技术书籍
多核编程技术好书推荐 多核程序设计技术——通过软件多线程提升性能 , 作 者: (孟加拉)阿克特(Akhter,S.),(美)罗伯茨(Roberts,J.) 著…

zabbix监控windows(03,08)
监控windows主机:下载zabbix_agents_2.2.3.win.zip (zabbix官网下载)解压文件,把对应的文件(32位或者64位)考到C盘根目录(对应目录就OK)并带配置文件;编辑配置文件:zabbix_agentd.win.confLogFi…

Dubbo原理何源码解析之服务暴露
2019独角兽企业重金招聘Python工程师标准>>> 一、框架设计 在官方《Dubbo 用户指南》架构部分,给出了服务调用的整体架构和流程: 另外,在官方《Dubbo 开发指南》框架设计部分,给出了整体设计: 以及暴露服务…

维基百科上的算法和数据结构链接很强大
突然发现维基百科上的算法和数据结构比百度百科强多啦,图文并茂。 其实这个网站不错:http://www.sorting-algorithms.com 冒泡排序: bubble冒泡的意思http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F-------------------…

基于 OpenCV 的图像阴影去除
作者 | 努比来源 | 小白学视觉我们经常需要通过扫描将纸上的全部内容转换为图像。有很多在线工具可以提高图像的亮度,或者消除图像中的阴影。但是我们可以手动删除阴影吗?当然可以,我们只需要将图像加载到相应的代码中,无需任何应…

not exists 跟not in 纪念一下
转载于:https://www.cnblogs.com/zzzzw/p/4973378.html

jquery $.proxy使用 Jquery实现ready()的源码
jquery $.proxy使用 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个。例如: 1 //正常的this使用2 $(#myElement).click(function() {3 4 // 这个this是我们所期望的,当前元素的this.5 6 $(…

PHP session回收机制
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改&#x…

WPF学习拾遗(二)TextBlock换行
原文:WPF学习拾遗(二)TextBlock换行下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧。 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要来的比较少, 比较值得…

Meta 开发 AI 语音助手,用于创建虚拟世界和实时翻译
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) Meta 在近日的「用人工智能构建元宇宙」的讨论会上,展示了最新的 AI 黑科技 「Builder Bot」 ,并且在此次会议上 Meta 公布了关于构建元宇宙的人工智能计划,其中包括…

MySQL的基础
2019独角兽企业重金招聘Python工程师标准>>> 数据库和SQL 什么数据库 数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务。 什么是SQL 结构化查询语言(Structured Query Language)…

Python:Bug 官网不要了,全迁去 GitHub
近几年,GitHub 开发者数量逐年上升,仅过去一年 GitHub 的新增用户便有 1600 万人,总用户数更是达到了 7300 万——在开源浪潮席卷全球中,GitHub 无疑成为了许多开发者迈入开源的一个重要途径。 Python 开发团队或许正是看中了这一…

最新的全球编程语言,操作系统,web服务器等使用率分析报告
由www.w3techs.com 根据alexa排名前100万的网站数据给出的分析报告,并每天持续更新。1.服务器端编程语言排名 http://w3techs.com/technologies/overview/programming_language/all点评:PHP是最高的,说明目前php是主流,但是asp.ne…

javascript中有关this的使用
this在面向对象编程中非常重要,他的值取决于调用的模式。 在Javascript中有4种调用模式:方法调用模式、函数调用模式、构造器调用和apply调用。 1. 方法调用模式:当一个方法被调用时,this被绑定到该对象。方法可以使用this访问自己…

Vue中v-if和v-show的使用场景
1. 官方文档 https://cn.vuejs.org/v2/guide/conditional.html#v-if-vs-v-show 2. v-if 和 v-show 的区别 2.1 官方解释 v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。 v-if 也是惰性的:如果在初…

手机自带的显示基站命令
安卓手机自带快捷指令显示当前的网络信息,不过手机厂商不同,命令也不一样。每次要用时总想不起来命令,记下备用。(1) HTC 安卓手机在拨号键盘输入 *#*#4636#*#* , 选择 “手机信息” (2)三星安卓手机 *#*#4636#*#* , 选择 “手机信息” (3)摩…

LB负载均衡集群 - NAT
前提:客户机 : eth0 192.168.0.200 eth1 192.168.205.129dir主机: eth0 192.168.0.166 eth1 192.168.205.128rs1主机: eth0 192.168.0.207rs2主机: eth0 192.168.0.208rs1 和 rs2的网关是dir 192…

时序预测的三种方式:统计学模型、机器学习、循环神经网络
作者 | luanhz来源 | 小数志导读时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用。甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格、天气变化等等。关于时序预测问题的相关理论也极为广泛,…

Python 爬虫练手项目—酒店信息爬取
from bs4 import BeautifulSoup import requests import time import reurl http://search.qyer.com/hotel/89580_4.html urls [http://search.qyer.com/hotel/89580_{}.html.format(str(i)) for i in range(1,10)] # 最多157页 infos [] # print(urls)# 批量爬取数据 def g…

应用交换技术的负载均衡算法
原文出处是:http://hi.baidu.com/ruijievideo/blog/item/5959be1f3c1621ff1bd576d2.html 应用交换技术的负载均衡算法应用交换技术里主要包括四项关键的技术:◆截获和检查流量◆服务器监控健康检查◆负载均衡算法◆会话保持截获和检查流量保证只有合适的…

平民架构的春天——UCloud数据方舟实战记
LNMP是最亲民的网页服务架构,整合了优秀的开源软件,想必大家再熟悉不过了,随着云计算的落地;大众创业,万众创新的倡导,为了更好的服务和安全,LNMP也迁入了云平台,比如像UCloud这样优…