本文主要介绍pandas.dataframe的三个接口,即assign、eval、query,分别用于赋值、查询和执行计算。
01 assign
在数据分析处理中,赋值产生新的列是非常高频的应用场景,简单的可能是赋值常数列、复杂的可能是由一列产生另外一个一列,对于这种需求pandas有多种方法实现,但个人唯独喜欢assign,用起来优雅高效。
例如,对于以上简单的dataframe数据框,需要创建一个新的列c,一般来说可能有3种创建需求:常数列、指定序列数据以及由已知列通过一定计算产生。那么应用assign完成这3个需求分别是:
注意事项:
assign赋值新列时,一般用新列名=表达式的形式,其中新列名为变量的形式,所以不加引号(加引号时意味着是字符串);assign返回创建了新列的dataframe,所以需要用新的dataframe对象接收返回值;assign不仅可用于创建新的列,也可用于更新已有列,此时创建的新列会覆盖原有列。02 eval
实际上,eval是一个python基础函数,用于执行字符串形式的计算表达式,例如以下简单实例:
那么,eval作为pandas.dataframe数据结构的一个接口,执行功能应该也与执行计算有关。另一方面,pandas中实际上是内置了大量的sql类语法(包括下面要介绍的query也是),而eval的功能正是执行类似sql语法中的计算,对已知列执行一定的计算时可用eval完成。例如,仍以前述由a和b列产生c列为例,应用eval的方法为:
了解sql语法的都知道可用@前缀修饰自定义变量,这一用法在这里的eval中也得以保留,此时可非常方便的引用外部变量。当然,eval中的计算表达式本身属于字符串形式,所以自然也可以用python的通用字符串引用方法。如下图所示。
注意事项:
eval支持接收一个inplace参数控制原地创建新变量或者返回新的dataframe;也支持仅用表达式而不设置新变量名,此时返回数据为series格式,如下图所示;eval表达式中也支持调用函数执行复杂计算。
03 query
这应该是最近使用最为频繁的一个接口了,pandas中虽然也提供了多种数据筛选方式,例如loc中增加表达式、或者直接用df[df[]……]等等,但总觉得用起来不够优雅,尤其是要写两遍df以及[]等等,此时如果灵活运用query函数,那么会便捷不少。尤其是query也是类似于sql中where关键字的语法逻辑,用起来会很顺滑。
例如对于以上dataframe,需要根据不同场景查询满足条件的记录,调用query的实现方式为:
当然,之所以说query中支持类似sql的语法,是因为其也有两个sql中标志性的设计,其一是@引用自定义外部变量,其二是对于特殊的列名(例如包含空格的字符)可以用反引号``加以修饰引用。例如,下述例子中c c列中有个空格,直接用于字符串表达式会存在报错,此时可使用反引号加以修饰,同时查询条件中应用了@修饰符引用外部变量。当然,与eval中类似,这里当然也可以用f字符串修饰引用。
注意事项:
query中也支持inplace参数,控制是否将查询过滤条件作用于dataframe本身;与eval类似,query中也支持引用外部函数。
华为P10闪存门最新消息:深挖!iPhone6基带门、三星Note7爆炸与华为闪存门事件的实质区别!
智能包装 智能包装有哪些类型
这么好的业绩,怎么还是拉不动格力股价?
5G SA组网时的4G/5G互操作场景配置试验参数的比较和研究
智能手表座充\耳机USB磁吸充电线专用:OVP+OCP过压过流二合一芯片
Pandas函数的三个接口介绍
关于矩阵切换器一些常用专业术语的解释
迪士尼乐园机器人来袭会高难度杂技 将是必看项目
电风扇电磁兼容整改案例
新一代iQOO Neo5或将采用120Hz OLED全面屏
psci电源状态基础知识介绍
浅析触控显示行业的几大发展趋势
信息通信企业长江通信发布2021年报
工业设备大数据云平台:提升生产效率的重要工具
使用更灵活、更方便的罗氏线圈
直流接触器的使用简化了电路板设计过程
LED显示屏如何拓展智慧城市应用?LED灯杆屏应用的详细概述
良心不?小米16000mAh移动电源拆解+充放电测试
酷比魔方与高通骁龙合作,有望推出更有竞争力的产品
Fairchild FAN6756 65W笔记本电脑电源解决方案