一、使用分组聚合进行组内计算
使用groupby方法拆分数据
· 提供的是分组聚合步骤中的拆分功能,能根据索引或字段对数据进行分组
DataFrame.groupby(by=None, axis=0, level=None, as_index=True,
sort=True, group_keys=True, squeeze=False, **kwargs)
by参数的特别说明
o 字符串或者字符串列表:使用这些字符串所代表的字段作为分组依据
o 函数:使用函数对索引进行计算并分组
o 字典或者Series:使用字典或者Series的值用做分组依据
o NumPy数组:使用数组的元素作为分组依据
使用groupby对象常用的描述性统计方法
· 分组后的结果并不能直接查看,而是被存在内存中,输出的是内存地址
· 分组后的数据对象GroupBy类似Series与DataFrame
使用agg方法聚合数据
· agg,aggregate函数都支持对每个分组应用某函数(包括Python内置函数或自定义函数)
· agg,aggregate函数都支持直接对DataFrame进行函数应用操作。
· 一般情况下,agg和aggregate函数对DataFrame对象操作时功能几乎完全相同,
DataFrame.agg(func, axis=0, *args, **kwargs)
DataFrame.aggregate(func, axis=0, *args, **kwargs)
使用agg方法聚合数据:求统计量
· 可以使用agg方法一次求出当前数据中所有菜品销量和售价的总和与均值detail[['counts','amounts']].agg([np.sum,np.mean]))
· 对于某个字段希望只做求均值操作,而对另一个字段则希望只做求和操作,
o 可以使用字典的方式,将两个字段名分别作为key,然后将NumPy库的求和与求均值的函数分别作为value,如detail.agg({'counts':np.sum,'amounts':np.mean}))。
· 在某些时候还希望求出某个字段的多个统计量,某些字段则只需要求一个统计量,此时只需要将字典对应key的value变为列表,列表元素为多个目标的统计量即可,如detail.agg({'counts':np.sum,'amounts':[np.mean,np.sum]}))
使用agg方法聚合数据:自定义函数
· 在agg方法可传入自定义的函数
o 在agg中可直接使用NumPy库中的函数,如np.mean,np.median,np.sum等
o 但在自定义函数中使用NumPy库中的这些函数,如果计算的时候是单个序列则会无法得出想要的结果,如果是多列数据同时计算则不会出现这种问题。
· 使用agg方法能够实现对每一个字段每一组使用相同的函数
· 如需对不同的字段应用不同函数,则可和Dataframe中使用agg方法相同
使用apply方法聚合数据
· apply方法类似agg方法
· apply与agg比较
o apply传入的函数只能够作用于整个DataFrame或Series
o apply没有agg对不同字段,应用不同函数获取不同结果的功能
o apply方法对GroupBy对象进行聚合操作的方法和agg方法类似
DataFrame.apply(func, axis=0, broadcast=False,
raw=False, reduce=None, args=(), **kwds)
使用transform方法聚合数据
· transform方法能够对整个DataFrame的所有元素进行操作。且transform方法只有一个参数“func”,表示对DataFrame操作的函数。
· 同时transform方法还能够对DataFrame分组后的对象GroupBy进行操作,可以实现组内离差标准化等操作。
· 若在计算离差标准化的时候结果中有NaN,这是由于根据离差标准化公式,最大值和最小值相同的情况下分母是0。而分母为0的数在Python中表示为NaN
创建透视表和交叉表
使用povit_table函数创建透视表
· 利用pivot_table函数可以实现透视表,pivot_table()函数的常用参数及其使用格式如下。
· 在不特殊指定聚合函数aggfunc时,会默认使用numpy.mean进行聚合运算,numpy.mean会自动过滤掉非数值类型数据。可以通过指定aggfunc参数修改聚合函数。
· 和groupby方法分组的时候相同,pivot_table函数在创建透视表的时候分组键index可以有多个。
· 通过设置columns参数可以指定列分组。
· 当全部数据列数很多时,若只想要显示某列,可以通过指定values参数来实现。
· 当某些数据不存在时,会自动填充NaN,因此可以指定fill_value参数,表示当存在缺失值时,以指定数值进行填充。
· 可以更改margins参数,查看汇总数据。
使用crosstab函数创建交叉表
· 交叉表是一种特殊的透视表,主要用于计算分组频率。利用pandas提供的crosstab函数可以制作交叉表,crosstab函数的常用参数和使用格式如下。
· 由于交叉表是透视表的一种,其参数基本保持一致,不同之处在于crosstab函数中的index,columns,values填入的都是对应的从Dataframe中取出的某一列。
pandas.crosstab(index, columns, values=None, rownames=None, colnames=None,
aggfunc=None, margins=False, dropna=True, normalize=False)
实例
以餐饮数据为例
· 介绍了数据库数据,csv数据,Excel数据三种常用的数据读取与写入方式
· 阐述了DataFrame的常用属性,方法与描述性统计相关内容。
· 介绍了时间数据的转换,信息提取与算术运算
· 剖析了分组聚合方法groupby的原理,用法和三种聚合方法
· 展现了透视表与交叉表的制作方法
二、Pandas数据预处理
合并数据
堆叠合并数据:横向堆叠
· 横向堆叠,即将两个表在1轴方向不同的列拼接在一起
· concat函数可以完成横向堆叠,concat函数的基本语法如下。
pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, copy=True)
· 当axis=1的时候,concat做行对齐,然后将不同列名称的两张或多张表合并
· 当两个表索引不完全一样时,可以使用join参数选择是内连接还是外连接
o 在内连接的情况下,仅仅返回索引重叠部分
o 在外连接的情况下,则显示索引的并集部分数据,不足的地方则使用空值填补。
· 当两张表完全一样时,结果都是将两个表完全按照X轴拼接起来,与join参数无关
堆叠合并数据:纵向堆叠
· 纵向堆叠
o 即将两个表在0轴方向不同的行拼接在一起
· concat函数:
o 在默认情况下,即axis=0时,concat做列对齐,
o 列名并不完全相同的情况下,可使用join参数
o join为inner时,列名取交集,为outer时,列名取并集
o 如果列名相同,则join参数无效
· append方法
o 实现纵向表堆叠前提条件:两张表的列名需要完全一致
· append方法的基本语法
pandas.DataFrame.append(self, other, ignore_index=False, verify_integrity=False)