01 回顾 前面介绍了Pandas最重要的两个类:Series和DataFrame,讲述了这两种数据结构常用的属性和操作,比如values,index, columns,索引,Series的增删改查,DataFrame的增删改查,Series实例填充到Pandas中。 02 读入DataFrame实例 读入的方式有很多种,可以是网络 html 爬虫到数据,可以从excel, csv文件读入的,可以是Json的数据,可以从sql库中读入,pandas提供了很方便的读入这些文件的API,以读入excel,csv文件为例:
工作中遇到常见问题及解决措施
03 DataFrame实例写入到excel和csv文件中 处理读取,当然还有写入,写入API也很简单,准备好了要写入的DataFrame实例后,
构造一个pd_data, 然后写入到excel文件中,
保存后的文件显示如下: 保存到excel或csv文件中,最经常出现的一个问题:
04 DataFrame遍历Series 读入或内存创建一个DataFrame实例:pd_data后,我们想根据某些条件,按照某个规则,对这些数据进行聚类,那么,一种比较直接的办法便是对pd_data遍历:
输出结果如下,seri是一个Series实例 分享一个面试题,记得当年我面试时,二面的面试官直接问题pd_data.iterrows()返回的对象是什么类型,不知道大家能说的上来吗。用print(type( pd_data.iterrows() ))看下,返回结果 :generator.中文名字叫发生器,这是个什么东东? 它是list吗?我们回顾下发生器的相关知识。 我们大家都熟悉列表,那么创建一个列表有什么问题呢?内存数量总是有限的,列表容量肯定不能超过内存大小。如果创建一个包含100万个元素的列表,不仅占用很大的存储空间,并且假如我们仅仅需要访问前面10%的元素,那后面绝大多数元素占用的空间都白白浪费了。 如果列表元素中的元素可以按照某种算法推算出来,那是否可以在循环过程中,推算出我们需要的一定数量的元素呢?这样地话,我们就可以灵活地创建需要数量的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。最难理解的就是generator和普通函数的执行流程不一样,函数是顺序执行,遇到return语句或者最后一行函数语句就返回。变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 05 操作两个DataFrame实例 以上阐述了DataFrame的最基本的操作,接下来,说一个好玩的功能。如果我已知一系列点的坐标,想求出任意两点坐标之间的所有组合。该怎么使用merge接口实现这个功能。
如何用merge求出任意两点间的所有组合呢? 结果集的个数应该为4*4=16行的矩阵,具体的实现脚本为:
这样就求得了任意两点之间的所有组合了,接下来,去掉添加的标签key,以及消除s_no和e_no重复的行。 06 数据过滤 利用掩码过滤数据是比较常用的,且简洁高效的方法。实现以上过滤,我们可以使用这个技术。 首先,去掉标签key这列,
先得到掩码,条件为如下,返回的结果为一个Series实例,数据的类型为bool.
接下来,使用如何拿这个Series实例得到最终的矩阵呢? 直接使用
为什么 loc[Series] 也可以呢? 再看下loc的API文档,可以看出bool数组也是可以的,我们又知道Series是数组和标签字典的组合。
去重后的结果如下: 大家一看,怎么最后一行的标签还是14啊,但是明显行数少了啊, 原来行标签断开了,这不是我们想要的,还是要从0开始连续排序啊。怎么办? 07 重置索引 DataFrame和Series实例都有reset_index方法,这是与索引相关的方法,具体实施如下:
看下参数drop的含义:
以上总结了:
|
|