干货!直观地解释和可视化每个复杂的 DataFrame 操作
大多数数据科学家可能会赞扬Pandas进行数据准备的能力,但许多人可能无法利用所有这些能力。操作数据帧可能很快会成为一项复杂的任务,因此在Pandas中的八种技术中均提供了说明,可视化,代码和技巧来记住如何做。
Pandas提供了各种各样的DataFrame操作,但是其中许多操作很复杂,而且似乎不太平易近人。本文介绍了8种基本的DataFrame操作方法,它们涵盖了数据科学家需要知道的几乎所有操作功能。每种方法都将包括说明,可视化,代码以及记住它的技巧。
Pivot
透视表将创建一个新的“透视表”,该透视表将数据中的现有列投影为新表的元素,包括索引,列和值。初始DataFrame中将成为索引的列,并且这些列显示为唯一值,而这两列的组合将显示为值。这意味着Pivot无法处理重复的值。
旋转名为df 的DataFrame的代码 如下:
记住:Pivot——是在数据处理领域之外——围绕某种对象的转向。在体育运动中,人们可以绕着脚“旋转”旋转:大熊猫的旋转类似于。原始DataFrame的状态围绕DataFrame的中心元素旋转到一个新元素。有些元素实际上是在旋转或变换的(例如,列“ bar ”),因此很重要。
Melt
Melt可以被认为是“不可透视的”,因为它将基于矩阵的数据(具有二维)转换为基于列表的数据(列表示值,行表示唯一的数据点),而枢轴则相反。考虑一个二维矩阵,其一维为“ B ”和“ C ”(列名),另一维为“ a”,“ b ”和“ c ”(行索引)。
我们选择一个ID,一个维度和一个包含值的列/列。包含值的列将转换为两列:一列用于变量(值列的名称),另一列用于值(变量中包含的数字)。
结果是ID列的值(a,b,c)和值列(B,C)及其对应值的每种组合,以列表格式组织。
可以像在DataFrame df上一样执行Mels操作 :
记住:像蜡烛一样融化(Melt)就是将凝固的复合物体变成几个更小的单个元素(蜡滴)。融合二维DataFrame可以解压缩其固化的结构并将其片段记录为列表中的各个条目。
Explode是一种摆脱数据列表的有用方法。当一列爆炸时,其中的所有列表将作为新行列在同一索引下(为防止发生这种情况, 此后只需调用 .reset_index()即可)。诸如字符串或数字之类的非列表项不受影响,空列表是NaN值(您可以使用.dropna()清除它们 )。
在DataFrame df中Explode列“ A ” 非常简单:
要记住:Explode某物会释放其所有内部内容-Explode列表会分隔其元素。
Stack
堆叠采用任意大小的DataFrame,并将列“堆叠”为现有索引的子索引。因此,所得的DataFrame仅具有一列和两级索引。
堆叠名为df的表就像df.stack()一样简单 。
为了访问狗的身高值,只需两次调用基于索引的检索,例如 df.loc ['dog']。loc ['height']。
要记住:从外观上看,堆栈采用表的二维性并将列堆栈为多级索引。
Unstack
取消堆叠将获取多索引DataFrame并对其进行堆叠,将指定级别的索引转换为具有相应值的新DataFrame的列。在表上调用堆栈后再调用堆栈不会更改该堆栈(原因是存在“ 0 ”)。
堆叠中的参数是其级别。在列表索引中,索引为-1将返回最后一个元素。这与水平相同。级别-1表示将取消堆叠最后一个索引级别(最右边的一个)。作为另一个示例,当级别设置为0(第一个索引级别)时,其中的值将成为列,而随后的索引级别(第二个索引级别)将成为转换后的DataFrame的索引。
可以按照与堆叠相同的方式执行堆叠,但是要使用level参数: df.unstack(level = -1)。
Merge
合并两个DataFrame是在共享的“键”之间按列(水平)组合它们。此键允许将表合并,即使它们的排序方式不一样。完成的合并DataFrame 默认情况下会将后缀_x 和 _y添加 到value列。
为了合并两个DataFrame df1 和 df2 (其中 df1 包含 leftkey, 而 df2 包含 rightkey),请调用:
合并不是pandas的功能,而是附加到DataFrame。始终假定合并所在的DataFrame是“左表”,在函数中作为参数调用的DataFrame是“右表”,并带有相应的键。
默认情况下,合并功能执行内部联接:如果每个DataFrame的键名均未列在另一个键中,则该键不包含在合并的DataFrame中。另一方面,如果一个键在同一DataFrame中列出两次,则在合并表中将列出同一键的每个值组合。例如,如果 df1 具有3个键foo 值, 而 df2 具有2个相同键的值,则 在最终DataFrame中将有6个条目,其中 leftkey = foo 和 rightkey = foo。
记住:合并数据帧就像在水平行驶时合并车道一样。想象一下,每一列都是高速公路上的一条车道。为了合并,它们必须水平合并。
Join
通常,联接比合并更可取,因为它具有更简洁的语法,并且在水平连接两个DataFrame时具有更大的可能性。连接的语法如下:
使用联接时,公共键列(类似于 合并中的right_on 和 left_on)必须命名为相同的名称。how参数是一个字符串,它表示四种连接 方法之一, 可以合并两个DataFrame:
-
' left ':包括df1的所有元素, 仅当其键为df1的键时才 包含df2的元素 。否则,df2的合并DataFrame的丢失部分 将被标记为NaN。
-
' right ':' left ',但在另一个DataFrame上。包括df2的所有元素, 仅当其键是df2的键时才 包含df1的元素 。
-
“outer”:包括来自DataFrames所有元素,即使密钥不存在于其他的-缺少的元素被标记为NaN的。
-
“inner”:仅包含元件的键是存在于两个数据帧键(交集)。默认合并。
记住:如果您使用过SQL,则单词“ join”应立即与按列添加相联系。如果不是,则“ join”和“ merge”在定义方面具有非常相似的含义。
Concat
合并和连接是水平工作,串联或简称为concat,而DataFrame是按行(垂直)连接的。例如,考虑使用pandas.concat([df1,df2])串联的具有相同列名的 两个DataFrame df1 和 df2 :
尽管可以通过将axis参数设置为1来使用concat进行列式联接,但是使用联接 会更容易。
请注意,concat是pandas函数,而不是DataFrame之一。因此,它接受要连接的DataFrame列表。
如果一个DataFrame的另一列未包含,默认情况下将包含该列,缺失值列为NaN。为了防止这种情况,请添加一个附加参数join ='inner',该参数 只会串联两个DataFrame共有的列。
切记:在列表和字符串中,可以串联其他项。串联是将附加元素附加到现有主体上,而不是添加新信息(就像逐列联接一样)。由于每个索引/行都是一个单独的项目,因此串联将其他项目添加到DataFrame中,这可以看作是行的列表。
Append是组合两个DataFrame的另一种方法,但它执行的功能与concat相同,效率较低且用途广泛。
如果您喜欢的话欢迎点赞转发!
往期精彩链接:
看完别走还有惊喜!
我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
什么是链路追踪?分布式系统如何实现链路追踪?
公众号关注 “ 杰哥的IT之旅 ”, 选择“ 星标 ”, 重磅干货,第一 时间送达! 在分布式系统,尤其是微服务系统中,一次外部请求往往需要内部多个模块,多个中间件,多台机器的相互调用才能完成。在这一系列的调用中,可能有些是串行的,而有些是并行的。在这种情况下,我们如何才能确定这整个请求调用了哪些应用?哪些模块?哪些节点?以及它们的先后顺序和各部分的性能如何呢? 这就是涉及到链路追踪。 什么是链路追踪? 链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。 链路追踪的原理 衡量一个接口,我们一般会看三个指标: 1、接口的 RT(Route-Target)你怎么知道? 2、接口是否有异常响应? 3、接口请求慢在哪里? 1、单体架构时代 在创业初期,我们的系统一般是单体架构,如下: 对于单体架构,我们可以使用 AOP(切面编程)来统计这三个指标,如下: 使用 AOP(切面编程),对原本的逻辑代码侵入更少,我们只需要在调用...
- 下一篇
我的服务器接连被黑客攻击,我好难
最近在几台测试服务器上跑一些业务数据,但是过了几天服务器突然变的奇慢无比,敲个命令就像卡壳一样,有时候甚至都连接不上,最开始我以为是网络问题,就强行kill掉进程,重新跑一下进程,最后实在受不了,就上阿里云后台说重启下服务器吧,结果看到CPU的占用率已经到达了100%。 这是CPU是恢复正常之后截图 看到这样我以为是因为我跑了大量的数据导致CPU飙升的,然后我就kill到了进程,并且重启了服务器,启动之后CPU正常,我以为就是我跑数据导致的,此后我就没用这台服务器跑数据了,我就单纯的以为这就算处理好了,没想到等我过几天部署测试包的时候发现,又是奇慢无比,看了下CPU占用率又是99.9%,事实证明我还是太年轻了。 终于忍无可忍,就深究下吧,先用linux命令(top)查看下,到底是什么占用了这么多CPU资源,结果如下图: 看到的瞬间第一感觉就是,这是啥玩意,这是谁部署的。问了下平时身旁的背锅侠,好像也不是他弄的,看来这次这锅是甩不了了,那就只能... 「What?中病毒了?」 根据过往的经验,这玩意不应该是点了网页上的小姐姐才会发生的事情吗?我这为什么也就中毒了。 这东西是啥 既然已经中...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路