这里讲数据透视,基本上和Excel里面的数据透视异曲同工,通过pandas编程实现,功能更加强大
# 基础部分import pandas as pdimport numpy as npposition = pd.read_csv('position.csv')company = pd.read_csv('company_sql.csv',encoding='gbk')position.pivot_table()# 前四个参数重要:values=None, index=None, columns=None, aggfunc='mean',fill_value=None# values:具体计算的值# index:形成的索引# columns:列# aggfunc:引用哪个函数,平均值默认# fill_value:可以对缺失值进行一个填充# 窍门:想想一下自己想要生成一个什么样的结果# 数据透视类似于聚合,聚合之后会生成一张新的表格dataframe# 想一下,我想要的数据形式是什么样的???# 比如按照城市来聚合,那么就是希望城市变成索引,最终形成了一个索引和列分别是什么样子的透视表position.pivot_table(index='city',columns='workYear',values='avg')# NaN缺失值就是没有用这个岗位# Excel数据透视里都可以支持多重索引,那这里也可以。把education传递到索引里面,columns、values也可以传position.pivot_table(index=['city','education'],columns='workYear',values='avg')position.pivot_table(index=['city','education'],columns='workYear',values=['top','avg'])# 尽量使用np.mean,np.sum,但是'mean'变成['mean',](列表形式)也可以position.pivot_table(index=['city','education'],columns='workYear',values=['top','avg'],aggfunc=[np.mean,np.sum])# 可以继续切片position.pivot_table(index=['city','education'],columns='workYear',values=['avg'],aggfunc=['mean','sum'])['mean']['avg'].loc['上海']# 几个有用的函数# margins=False, dropna=True, margins_name='All'# margins:下边加一个汇总项(True),对列进行汇总,平均对应平均,求和对应求和# dropna:把空值砍掉position.pivot_table(index=['city','education'],columns='workYear',values=['top','avg'],aggfunc=[np.mean,np.sum],margins=True,)# 数据透视表里的一些高级用法,应用场景不会特别多# 对'avg'进行一个'mean';对'top'进行一个'sum'# 操作:把aggfunc里的列表,改成一个字典# 后边依然可以进行切片或者queryposition.pivot_table(index=['city','education'],columns='workYear',values=['avg','top'],aggfunc={'avg':np.mean,'top':np.sum})# 添加索引position.pivot_table(index=['city','education'],columns='workYear',values=['avg','top'],aggfunc={'avg':np.mean,'top':np.sum}).reset_index().to_csv('test.csv')# 最终输出是什么形式?# 后续和etl一起讲两种方式输出:to_csv('test.csv')
数据透视表为我们汇总大数据量提供了一个很有利的工具
pandas基础应用在这里已经讲完了,汇总、清洗、处理这几方面已经可以自己动手做了
最后剩下两块:一块是可视化相关的,另一块是时间序列相关的;这两块还是要结合练习题!!!
