1、第八章基于Python整理数据 在实际的数据分析建模的工作中,大部分的时间用在数据预处理任务上,包括数据的加载、清洗、格式转换,以及数据的重新编排。这是因为,绝大部分情况下,存储在数据库或者文件中的数据,它们的格式和内容并非恰好满足当前的数据分析任务。而将数据通过各种方式整理得到完全符合要求的格式,往往需要花费相当大的时间和精力。Python语言具备清晰简洁的语法,灵活高效的数据结构,以及丰富广泛的第三方库,可以帮助我们极大地提高烦杂的数据整理工作的效率。在Python语言丰富的第三方库中,pandas尤其适合做数据整理工作。实际上,开源的pandas库更新完善很多时候是由实际的数据整理需求驱
2、动的。本章重点介绍如何使用pandas高效地完成典型的数据整理工作。本章内容提要目录010203合并多个数据集数据重塑数据转换01合并多个数据集pandas提供了多种方法,用于合并多个数据集,比如:pandas.merge基于一个或多个键连接多个DataFrame中的行。pandas.concat按行或按列将不同的对象叠加到一起。01、合并多个数据集 1.1、数据库风格的DataFrame合并 SQL语言的用户对join操作很熟悉,它用于合并数据集,按照一个或多个特定的键来连接相关的行。在关系型数据库中,连接操作处于中心的位置。pandas提供了merge函数,可以对数据集进行类似数据库连接的
3、操作。我们还可以使用index索引列作为连接的字段,进行合并操作。我们可以通过右图实例大致了解Merge方法的使用。01、合并多个数据集 1.2、沿着横轴或纵轴串接l 理解轴(axis)的含义0(默认):表示沿着每一列或行标签索引值向下执行方法1:表示沿着每一行或者列标签模向执行对应的方法具体用法如下图示:02数据重塑数据重塑表示转换输入数据的结构,使其适合后续的分析。pandas中包含了一些用于重塑数据的基础操作,这些操作用于二维表格数据。这一节将介绍其中广泛使用的stack、unstack以及pivot操作。02、数据重塑 2.1、沿着横轴多级索引数据的重塑pandas的DataFrame
4、,可以设置多级索引。对于多级索引数据,pandas的stack 方法可以将数据集的列旋转为行,而unstack 方法可以将数据的行旋转为列。stack和unstack过程。创建具有多级索引的数据集02、数据重塑 2.2、应用pivot方法重塑数据数据统计二维表转换,pivot()这个方法可以解决很多问题,节省了大量的代码。melt()可以作为它的反过程。具体使用效果,如下图所示:03数据转换到目前为止本章已介绍了数据的合并、重排等操作。另一类重要操作则是过滤、清理以及其他的转换工作。03、数据装换 3.1、移除重复数据重复行出现在DataFrame中可能有多种原因,DataFrame的dupl
5、icated方法返回一个布尔型Series,用以提示各行是否是重复行,与此相关的drop_duplicates方法会返回一个DataFrame。它去掉了duplicated函数返回值为TRUE的那些行。03、数据装换 3.2、利用函数或映射进行数据转换对很多数据集而言,你可能希望根据数组、Series或者DataFrame中的某列的值来进行转换操作。来看看下面这组有关公司大致体量的数据(假想),假如我们希望看到这些公司来自那些城市,可以先编写一个不同公司到城市的映射,Series的map方法可以接受一个函数或含有映射关系的字典型对象。03、数据装换 3.3、值转换利用fillna方法填充缺失数
6、据可以看做值转换的一种特殊情况。前面已经看到,map可用于修改对象的数据子集,而replace函数则提供了一种实现该功能的更简单、更灵活的方式:03、数据装换 3.4、重命名轴索引跟Series中的值一样,轴标签也可以通过函数或映射转换,得到一个不同标签的新对象。轴还能够被就地修改,而无需新建一个数据结构。如果希望就地修改某个数据集,传入inplace=True即可03、数据装换 3.5、离散化和面元划分连续数据常常被离散化或拆分为“面元”(bin)来帮助分析。03、数据装换 3.6、检测和过滤异常值过滤或变换异常值(outlier)在很大程度上是运用数组来运算。看一个含正态分布数据的Data
7、Frame:03、数据装换 3.6、检测和过滤异常值如果你要选出全部含有“超过3或3的值”的行,你可以在布尔型DataFrame中使用any方法:03、数据装换 3.6、检测和过滤异常值根据这些条件,就可以对值进行设置。下面的代码可以将值限制在区间3到3以内:03、数据装换 3.7、排列和随机采样使用numpy.random.permutation函数能够轻松对Series或DataFrame的列进行重新排序。通过需要排列的轴的长度调用permutation,可产生一个表示新顺序的整数数组:In 49:df=pd.DataFrame(np.arange(5*4).reshape(5,4)In 50:sampler=np.random.permutation(5)In 51:samplerOut51:array(1,3,0,4,2)03、数据装换 3.8、计算指标/哑变量另一种用于统计建模或机器学习的转换方式是:将分类变量(categorical variable)转换为“虚拟”或“指示”的矩阵。如果DataFrame的某一列包含k个不同的值,你可以派生出一个值均为1或0 的k列矩阵或DataFrame。pandas有一个get_dummies函数可以实现该功能。谢谢观看