在工作期间,我们通常会运用 Excel 或者 SQL 来进行数据的处理与分析,不过本文将为大家分享有关 Pandas 框架的内容,并且会给出该工具的具体使用方式,以供各位参考以往在进行数据分析时,常用的工具主要是 Excel 和 SQL,那些曾使用这两个工具来处理大数据分析的网友想必都曾体会过其中的艰辛。
本文将针对 Python 的 Pandas 大数据分析工具展开架构剖析,目的是让大家能够更自如地掌握这个强大的工具本文的架构分析是在阅读 Pandas 中文出版物教程、进行互联网搜索以及通过代码验证的基础上所形成的结构推测,并未深入到源代码层面进行分析,因此实际架构与本分析可能会存在一些细微的差异,还请大家留意。
1. 结构概览Pandas 就如同一个数据容器,而一个容器是否好用,不仅取决于它能容纳多少东西,更关键的是取出其中内容是否便捷Pandas 的 Series 和 DataFrame 作为数据容器,就好似一本书。
数组容器:相当于这本书仅设有页码倘若书本不超过几百页,或者使用频率较低,那么这样的设置并不会带来什么问题但如果书本拥有十万页,而且还需要频繁查找内容,那仅有页码肯定就不够方便了而数据分析就如同在拥有几十万、几百万页的书本中寻找数据,仅依靠页码肯定是远远不够的。
Index 容器:Index 是对数组容器页码的拓展,它在原页码的基础上增添了文本描述,读者对于频繁使用的章节还可以夹上一个标签Index 容器拥有众多子类型,能够简化索引的使用,例如:DatetimeIndex、PeriodIndex、IntervalIndex 等等。
MultiIndex 容器:它是对 Index 容器的组合,不但支持一层标签,还能够支持任意层数的标签,借助该容器能够实现目录管理Series 是一列数据值,DataFrame 则是由 N 列数据构成,它是 N 个 Series 的组合。
从容器的角度来看,Series 和 DataFrame 主要的拓展部分在于索引部分,它们两者都分为 index 和 values 两部分,其中 index 是索引,拥有复杂多样的各种实现类,而 values 仍然是 ndarray 类型。
2. SeriesSeries 是对数组的封装,相较于普通数组,它新增了 index 的属性在不考虑 MultIndex 的场景下,该图是准确无误的,但如果考虑到 MultiIndex,书签信息则可以拥有无数列数据。
2.1 数据初始化Series 的两列位置信息中,页码信息是由系统自动编码的,无法进行人工干预书签信息则是通过手动编码,可以进行指定,也可以不指定索引列和对象都可以单独拥有名称,而 value 则没有名字。
2.2 通过 Index 定位值数组支持按照位置进行访问,比如 s[1]Series 既支持按照位置访问,也支持按照 index 进行访问Series 传入的标签参数可以转换为位置信息loc 和 iloc 返回的值是向量,at 和 iat 返回的值是标量。
位置信息的使用,用 SQL 来表达就是:from 原表 where index.loc in or index.lable in2.3 通过值定位 Index函数的返回值是布尔类型的 Series要获取 index 值或者数据向量,还需要再次调用 se.loc[]。
此处函数的使用,用 SQL 表达就是:from 原表 y left join BoolSeries yi where y.index = yi.index and yi.value =True2.4 MultiIndex 构建。
Index 和 MultiIndex 都属于数组,数组的个数等同于数据的行数Index 数组的元素是标量数值,而 MultiIndex 的数组元素是元组,可以是二元组、三元组、四元组等等这里的目录操作,也是人工智能算法打标签的地方,打好标签之后就能够进行分群,进而实现推荐。
对于 Series 而言,由于它仅有一列数据,因此所有列的层级并不具备建立目录的功能,而 DataFrame 则拥有此功能2.5 时间构建目录时间可以依据年、月、日、时、分这五个维度构建一个目录层级结构,可以通过目录来实现。
可以直接使用 DatetimeIndex 对象进行构建3. DataFrameDataFrame 是由多个 Series 或者数组合并而成的组装表Series 和数组的组装方式分为三种场景,每种场景下又存在多种组合情况,如图所示,绿色的组合场景是合法的,白色的组合场景则是不合法的。
3.1 多个数组合并数组和 DataFrame 的维度信息对照:数组是有序的,因此拥有位置信息,不过位置信息是隐含的它隐式地对应于 DataFrame 的 index 属性数组是有值的,所以存在数值信息,数值信息是显式的。
它显式地对应于 DataFrame 的 value 属性数组和 DataFrame 的存储值对照:数组的值存储的是地址,所以数组可以容纳数值、字符串、对象等任意类型DataFrame 每列存储的类型是固定的,因此在 DataFrame 进行组装时,会自动转换数据类型。
组装关系用 SQL 表示为:原则猜测:之所以数组组装的要求如此严格,是因为数组本身非常灵活,数据清洗的程度较低,数据出现脏乱差的概率更大,所以在此处进行严格校验,可以降低数据出现错误的风险3.2 多个 Series 合并。
多个 series 组成 DataFrame 实际执行的是连表操作,其效果等同于 Sql 语句的全连接3.3 Series 和数组合并只要存在数组,就必须完全对齐,索引列会使用 Series 的索引列系统默认 Series 和数组的索引列会按照所在顺序建立联表关系。
当 Series 和数组组成 DataFrame 时,按照从严法则,必须上下对齐4. 数据分组分组是依据索引将数据进行聚合,存在两种方法:显式声明索引,可以直接使用索引进行分组不声明索引,调用 groupby 后会自动创建索引。
分组具有三个维度:行维度分组:groupby行维度分组 + 列维度分组:数据透视表 pivot按照顺序,以固定行数组成窗口进行分组:rolling、expanding4.1 显式声明索引后分组4.2 分组后自动创建索引。
4.3 行维度分组4.4 行列两维度分组4.4.1 单行单列写法4.4.2 多行单列写法4.4.3 多行多列写法4.5 窗口滚动分组滚动分组是依据位置数量进行分组,在实际工作中常说的过去 1 年、过去一个月、过去一周,以及时间函数都运用了滚动计算的理念。
窗口函数与窗口累计函数都能够使用 apply 函数获取窗口的值数组,并且可以利用该值进行任意匹配的运算4.6 窗口累计分组5. 改变数据形状在 Pandas 中,所处理的数据基本上都是按照表格进行组织的,数据输入存在两种方式,即按行输入和按列输入。
为了便于输入,通常会按照长轴维度输入数据比如 8 行两列的数据,可以按照行的顺序书写,也可以按照列的顺序书写对于该数据,肯定是按照列的顺序书写,这样需要输入的中括号数量最少数据输入完成后再进行处理即可从图中可以看出,数据经过 zip 分组后,从数据分组的角度来看:zip 和数据转置的效果是一致的。
6. 数据查询逻辑Series 和 DataFrame 作为数据容器,数据查询是非常重要的逻辑,在此处再对其流程进行系统梳理6.1 按索引取值按照索引取值,类似于在 select 语句中按照主键取值Pandas 在接收到入参索引后,会构建一个与被查询数据具有相同索引的 Series,其中被查询的索引对应的值为 True,未被查询的索引对应的值为 False,将该 Series 作为入参,其查询效果与直接输入索引进行查询的效果是相同的。
代码如下:6.2 按值取值在按照值进行取值时,每个运算符都对应一个 Bool如果 Bool 之间是 and 关系,就执行 b1*b2;如果 Bool 之间是 or 关系,就执行 b1+b27. 不同数据类型之间的转换逻辑。
8. Index 展开详解8.1 概述index 是比数组更大的容器,数组内的元素可以是不同的类型,index 统一规定了数组的类型,必须是 obj、Datetime、int、Period 等其中的一种。
index 会对数组内存储的数据类型进行猜测,如果是数值,会自动转换为对应的类型,否则统一定义为 object 类型定义 object 类型的好处是:可以存储任意类型的数据定义 object 类型的缺点是:虽然大而全,但却缺乏操作数据的方法。
只有小而精,才能够使用对应的操作方法为了能够调用 int、Datetime 类型数据对应的操作方法,需要显式地将其转换为对应的类型8.2 DatetimeIndexDatetimeIndex 就是 Datetime 格式的 index。
日期是一组连续的数字,默认可以按照年、月、日、时、分、秒进行分组,也可以自定义时间段进行分组如果某 Series 或者 DataFrame 需要使用年月日时分秒作为分组依据,有两个方案:8.2.1 年月日时分组成 5 列数组,通过 MultiIndex 赋值
将字符数组转为8.2.2 直接将日期转为 Datetimeindex 赋值,用方法取值两者对比,显然第二个方案更加简单灵活9. 常用函数说明9.1 map 与 replace 的等价写法map 可以将任意值更名为其他值,这里主要介绍将 Bool 转换为文本。
因为在查询函数返回的值都是布尔类型,所以在此场景下使用 map 函数的频率更高map 的传参是集合,这是因为这里的传值是映射关系多次调用 replace 函数的效果与调用 map 函数的结果是相同的9.2 isna 与 isin 的等价写法
isna 与 isin(pd.NA)是等价的fillna 与 replace(pd.Na)是等价的9.3 notna 与 notin 的等价写法pandas 没有 not in 函数但是有波浪线表示取反,即 True 取反后是 False,False 取反后是 True。
9.4 列拆分函数 splitSeries 分列,默认是将内容分成数组,不会展开。9.4.1 默认为 Series 格式
今天就分享到这里吧,德斯软件资讯是一个软件分享基地,其中包括红包软件有微信,钉钉,支付宝,陌陌,QQ,星星优选,小鸡易语,福瑞祥,火鸟XM,欣语,思语,close,微友趣,云集购物,云货淘,慎语,云鹿,顺胜,安信,伊蓝贝,频道chat,爱果go,火箭通讯,微信多开,微信分身,牛牛,红包透视,秒抢,单透软件,机器人,埋雷软件,红包尾数控制,爆粉,红包辅助,埋雷辅助,辅助外挂等一些红包强项外挂辅助软件功能免费下载使用。