4.2 第四章 Pandas玩转数据: apply执行方法、去重、时间序列及其重新采样画图,数据分箱、分组、聚合技术,透视表,小实战



一、 通过apply来调用方法,以预处理数据

1.1 通过apply,调用系统自带方法,批量改变大小写

从已有的csv文件中,获取到数据,用DataFrame盛放;

查看下前五列;

查看下尺寸大小:5行

2.

通过apply方法,来批量的改变DataFrame中的一列(/行)

  • 创建一个新的Series:元素是5个‘a’
  • 将A这一列的所有元素改为大写

1.2 通过apply,调用自定义方法,进行复杂操作(拆分列)

上述的批量改动,用到是系统自带的方法。

但是,如果需求是将一列改为三列,就没有现成的方法了。那怎么办呢?

1.

流程式的操作:

2.

通过自己编写一个方法来操作:

3.

通过rename来更改列索引的名字:入参是个字典

4.

通过combine来结合(填充):

删掉两个多余的列:

5.将其存储为一个csv文件,方便后续的使用

二、通过去重,进行数据清洗

2.1 代码实践

  • 数据准备

  • 查看是否有重复:False:代表跟前面无重复;True:代表跟前面有重复
  • 对Seqno这一列,将重复的元素及其所在的行,删除掉。(默认,保留的是第一个非重复元素及其所在的行)
  • keep='last':表示只想保留最后那一个元素及其所在的行

duplicate:

repeat or copy

三、时间序列基础:作为index来组成一个Series

3.1 方式1:用datetime专库,来生成一个datetime类型的时间序列对象

在python中,处理时间经常会使用一个库:datetime库。

1.

创建一个datetime对象:

创建一个list列表,包含多个datetime对象:

2.

创建一个Series,它的index就是上述列表中的datetime对象。发现:

  • 其values是numpy里的array数组
  • 其index是一个DatetimeIndex的对象

3.2 三种访问方式

1.

通过位置来访问

通过一个datetime对象来访问

直接通过具体的时间来访问

2.

如果只写年份,不写月日呢?那么就会返回对应范围内的所有数据:

3.3 方式2:用Pandas大库来快速生成一段时间范围

1.

  • periods:产生多少个时间对象
  • freq:时间对象的单位,默认是天D

2.

也可以产生100个周:

指定每周的起点是周一:

同理,也可以单位是小时:

3.上面的是包含多个datetime对象的list列表,可作为index。那么,下面就用它来生成一个Series:

四、时间序列数据的采样和画图

4.1 重新采样:调整采样频率

1.

创建一个时间序列:用Pandas库来生成一个范围的时间段t_range:
创建一个Series,将上述t_range作为index:

2.重新采样:频率高的--- > 频率低的

上述是一天一个数据,怎么才能实现一月一个数据呢?

3.重新采样:频率低的--- > 频率高的

上述是一天一个数据,怎么才能实现一小时一个数据呢?

其中:填充方式是:

  • ffill:forward fill
  • bfill:backward fill

4.2 画图:时序图

时间序列的数据,特别适合画图。

1.首次采样

图为:

2.重新采样:

让其从每小时的频率,变为每周的频率,即,将采样频率降低:

五、数据分箱技术 Binning

5.1 本质:分级分段

1.生活例子

超市中,相同品种的苹果,会根据不同的大小尺寸,来卖出不同的价格。

即,用下述的圆圈来对苹果进行分级。

2.

用Numpy库,来生成一个数组:包含20个随机整数,作为学生的成绩:

对上述的20个学生成绩,进行分级(分箱):

  • 先定义一个bins,即用来分级分段的“小圈圈”。
  • 看看上述的20个成绩,分别落在bins的数量。返回的是一个Categories对象
  • 查看下每个分段中,各有多少个人

5.2 对DataFrame的某一列column,来分级分段:20个学生成绩,划分分数段

其实,也可以对DataFrame的某一列column,进行分级分段:

1.

pandas库来生成学生一列:随机的三个字母或数字

包含for循环的列表表达式?

2.

将DataFrame的score一列,进行分箱分段,生成一个category对象:

将上述的category对象,赋值给DataFrame的一个新增列:

3.

上述的分箱还是不太明显。

可以对上述分级的箱子,贴个好懂直观的标签labels:

出错:old version:

new version:

借鉴:

六、数据分组技术 GroupBy

跟数据库中的GroupBy分组,原理一致。比如:

6.1 代码实践

1.

本地电脑中的csv文件:

新建一个csv文件时,最好是先一个text文本格式,然后改文件扩展名为csv。

如果先是excel格式,再改扩展名,那么pandas会读不出来、出错。

2.

读取为一个DateFrame:

对某一列进行分组,生成一个分组对象

该分组对象中,看下城市为BJ的情况:

并求平均值:

出错:

解决:

链接https://stackoverflow.com/questions/44522741/pandas-typeerror-could-not-convert-to-numeric

3.

6.2 原理(图)

先分割,再调用函数(比如求平均),最后重组

6.3 将groupby对象,转换为list列表、dict字典

1.

2.

用for循环,去访问groupby对象中的数据,看一下:

七、数据聚合技术 Aggregation

aggregation:

the act of gathering something together

= collection

7.1 使用自定义函数来聚合

1.

聚合函数,可以是系统自带的。比如,最大值、最小值:

聚合函数,也可以是,自定义的函数:

7.2 按照多个列column来groupby

1.

groupby:不是非得一个列column,也可以多个列

注意:下划线是一个元组tuple:

查看一下子的分组:

2.

还是用for循环,去访问groupby对象中的数据,看一下:

此时,tuple里有两个元素

八、透视表

概念,来源于Excel。

为了更好的展示数据,而制作的一种临时表。

这不就是数据库MySQL中的视图吗

8.1 函数中各参数的含义pd.pivot_table()

1.

本地电脑中的excel数据:销售表

2.

读取为一个DataFrame:

3.函数的解释

其中:

8.2 各参数的代码实践

需要对数据之间的关系,有一定的了解.

1.

index、values两个参数:

调整下聚合函数为求和:

2.

也可以是多个index:

3.

一个manager下面,是可以有多个的销售代表人员:

4.

需求:每个销售代表人员,的销售业绩是多少?

5.

columns参数:

上述的values参数、columns参数容易混淆:

columns:还是分列的作用

values:就是各个数值都是这个性质

6.fill_value参数

九、实战:分组和透视功能

9.1 数据准备

1.

538网站,用于查看航班的准点率

链接:https://projects.fivethirtyeight.com/flights/

2.

本地电脑中的数据:

3.

谷歌浏览器,根据表名找了好久,这次没找到原表。

又根据慕课课程名,找到了以前学生的笔记及其存放课堂的数据集的github链接。

9.2 task1:获取延误时间最长top10

1.

判断一个航班是否延误的标准:

就是只看arr_delay到达时间的字段,是否为负。

  • 正数:延误了多长时间。
  • 负数:没有延误。

2.

对arr_delay字段,进行递减排序;

拿出前十名,看下;

9.3 task2:计算延误和没有延误所占比例

1.

20万条数据中,有多少是取消的、没有取消的:

2.

生成新的一列,用bool值来体现;(因为所需函数比较简单,所以使用lambda表示即可)

  • 没有延误:十万多个
  • 延误的:九万多个

在数据分析领域:

用计算机这一”神算子“就是好,这么快就的数数。

3.

延误比:

9.4 task3:每一个航空公司延误的情况

本质:分组。

1.

生成一个groupby对象;

查看下里面的情况;生成的是一个多级的Series:

2.

将上述的多级的Series转换成一个DataFrame:

9.5 task4:画图:plot()

plot:secret plan。

1.

2.

上图不是很直观,所以接下来换个类型

9.6 task5:透视表:pivot_table()

pivot:中心、轴、枢纽。

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 4.2 第四章 Pandas玩转数据: apply执行方法、去重、时间序列及其重新采样画图,数据分箱、分组、聚合技术,透视表,小实战


Follow excellence, and success will chase you.