学习时间:2019/11/03 周日晚上23点半开始,计划1110学完

学习目标:Page218-249,共32页;目标6天学完(按每页20min、每天1小时/每天3页,需10天

实际反馈:实际XXX学完,耗时X天,X小时,平均每页X分钟。

实际应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析。本章关注可以聚合、合并、重塑数据的方法。

8.1 层次化索引

层次化索引(hierarchical indexing)是pandas的一项重要功能,它使得能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使得能以低维度形式处理高维度数据。

看以下例子,创建一个Series并用一个由列表或数组组成的列表作为索引:

  Ps:以上结果是经过美化的带有MultiIndex索引的Series的格式。

  

1)对于一个层次化索引的对象,可使用所谓的部分索引,使用它选取数据子集的操作更简单:

还可以在"内层"中进行选取:

2)层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演着重要的角色。如,可通过unstack方法将这段数据重新安排到一个DataFrame中:

其中,unstack的逆运算时stack:

3)对于DataFrame,每条轴都可以有分层索引

各层都可以有名字(可以是字符串,也可以是别的Python对象)。如果指定了名称,它们就会显示在控制台输出中:

Ps:注意区分 索引名state、color与行标签

有了部分列索引,故可以轻松选取列分组:

8.1.1 重排与分级排序

1)swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生变化)。比如,有时需要重新调整某条轴上各级别的顺序,或根据指定级别上的值对数进行排序。

2)sort_index则根据单个级别中的值对数据进行排序。

  Ps:交换级别时,也常会用到sort_index,这样最终结果就是按指定顺序进行字母排序了:

  

8.1.2 根据级别汇总统计

许多对DataFrame和Series的描述和汇总统计都有一个level选项,用于指定在某条轴上求和的级别。基于上面的DataFrame例子,根据行或列上的级别来分别进行求和:

Ps:其实是利用pandas的groupby功能,后文详解

8.1.3 使用DataFrame的列进行索引

经常有需要将DataFrame的一个或多个列当作行索引用,或者可能希望将行索引变成DataFrame的列。

以下面的DataFrame为例:

1)用DataFrame的set_index函数,可以将其一个或多个列转换为行索引,并创建一个新的DataFrame:

  Ps:默认情况下,那些列会从DataFrame中移除,但也可以将其保留下来:

  

2)reset_index的功能跟set_index刚好相反,层次化索引的级别会被转移到列里面:

8.2 合并数据集

pandas对象中的数据可以通过一些方式进行合并:

  • pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其他关系型数据库的用户会对此较为数据,因为它实现的就是数据库的join操作。
  • pandas.concat可以沿着一条轴将多个对象堆叠到一起。
  • 实例方法combine_first可以将重复数据拼接在一起,用一个对象中的值填充另一个对象中的缺失值。

8.2.1 数据库风格的DataFrame合并

数据集的合并(merge)或连接(join)运算是通过一个或多个键将行连接起来的。这些运算时关系型数据库(基于SQL)的核心。pandas的merge函数是对数据应用这些算法的主要切入点。

  Ps:上图中例子是多对一的合并。df1中的数据有多个被标记为a和b的行,而df2中key列的每个值仅对应一行。

1)对df1和df2对象调用merge

  Ps:此处并未指明用哪个列进行连接。若未指定,merge会自动将重叠列的列名当作键。

2)对df1和df2对象调用merge,同时指明进行连接的列

3)若两个对象的列名不同,则可以分别进行指定

  Ps:结果中无c和d以及与之相关的数据。默认情况下,merge做的是“内连接”-结果中的键是交集。外连接求取的是键的并集。如下图:

   

  

4)多对多的合并

8.2.2 索引上的合并

8.2.3 轴向连接

8.2.4 合并重叠数据

8.3 重塑和轴向旋转

8.3.1 重塑层次化索引

8.3.2 将"长格式"旋转为"宽格式"

8.3.3 将"宽格式"旋转为"长格式"

8.4 总结

至此,已经掌握了pandas数据导入、清洗、重塑,可进一步学习matplotlib数据可视化。稍后会回到pandas,学习更高级的分析。

利用Python进行数据分析 第8章 数据规整:聚合、合并和重塑.md的更多相关文章

  1. 利用Python进行数据分析 第6章 数据加载、存储与文件格式(2)

    6.2 二进制数据格式 实现数据的高效二进制格式存储最简单的办法之一,是使用Python内置的pickle序列化. pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle ...

  2. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  3. 利用Python进行数据分析_Pandas_处理缺失数据

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 读取excel数据 import pandas as pd import ...

  4. 利用Python进行数据分析 第4章 IPython的安装与使用简述

    本篇开始,结合前面所学的Python基础,开始进行实战学习.学习书目为<利用Python进行数据分析>韦斯-麦金尼 著. 之前跳过本书的前述基础部分(因为跟之前所学的<Python基 ...

  5. 利用Python进行数据分析 第7章 数据清洗和准备(2)

    7.3 字符串操作 pandas加强了Python的字符串和文本处理功能,使得能够对整组数据应用字符串表达式和正则表达式,且能够处理烦人的缺失数据. 7.3.1 字符串对象方法 对于许多字符串处理和脚 ...

  6. 利用Python进行数据分析 第7章 数据清洗和准备(1)

    学习时间:2019/10/25 周五晚上22点半开始. 学习目标:Page188-Page217,共30页,目标6天学完,每天5页,预期1029学完. 实际反馈:集中学习1.5小时,学习6页:集中学习 ...

  7. 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)

    4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...

  8. 利用Python进行数据分析 第5章 pandas入门(2)

    5.2 基本功能 (1)重新索引 - 方法reindex 方法reindex是pandas对象地一个重要方法,其作用是:创建一个新对象,它地数据符合新地索引. 如,对下面的Series数据按新索引进行 ...

  9. 利用Python进行数据分析 第5章 pandas入门(1)

    pandas库,含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具.pandas是基于NumPy数组构建. pandas常结合数值计算工具NumPy和SciPy.分析库statsmodels和 ...

随机推荐

  1. 大数据学习之路之HBASE

    Hadoop之HBASE 一.HBASE简介 HBase是一个开源的.分布式的,多版本的,面向列的,半结构化的NoSql数据库,提供高性能的随机读写结构化数据的能力.它可以直接使用本地文件系统,也可以 ...

  2. ubuntu之路——day7.3 normalizing input(加快迭代速度)

    输入归一化 1,对每个特征零均值化 2,对每个特征归一化方差 注意:训练集和测试集要使用相同的均值和方差去归一化. 原本狭长的优化函数,要找到最小值,需要设置较小的学习率,并且进行多次迭代:而归一化以 ...

  3. Tomcat学习四步走:内核、集群、参数及性能

    主题简介: 内核实现原理 分布式集群 生产部署关键参数 性能监控和分析 一.内核实现原理 HTTP Web服务器与浏览器之间以HTTP协议通信,浏览器要访问服务器即向服务器发送HTTP请求报文. 如图 ...

  4. java 判断list是否为空

    问题: 之前用 list!=null 来判断list是否为空,但发现,定义一个list后,即使里面并没有加入任何元素,返回的结果仍旧是 true, 其实,本意是希望在没有任何元素时,返回 false, ...

  5. .gitignore忽略多层文件夹用**

    一.写法 **/bin/Debug/ 前面的两个*号代表任意多层上级文件夹 需要 git 1.8.2 及其以上的版本才支持 如何查看当前版本并且升级(windows) 二.如何升级 git是2.14. ...

  6. fastjson字段顺序问题

    构造函数中指定使用有序 public JSONObject(boolean ordered) { this(16, ordered);} 示例: JSONObject fastJson = new J ...

  7. Python的开源人脸识别库:离线识别率高达99.38%(附源码)

    Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073   11.11 智慧上云 ...

  8. openresty开发系列22--lua的元表

    openresty开发系列22--lua的元表 举个例子,在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作. 那如何计算两个table的相加 ...

  9. selenium grid用法

    一,selenium grid是什么? selenium是一个用于UI自动化测试的工具. selenium grid是selenium家族中的三大组件的一员.selenium grid有两个版本,gr ...

  10. TeslaManage 2.0编译日志

    1>------ 已启动全部重新生成: 项目: TeslaManage, 配置: Debug x64 ------1> Moc'ing teslamanage.h...1> Uic' ...