任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。本文和你一起来探索Python中的pivot_table函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
文章目录
- 一、pivot_table函数定义
- 二、pivot_table函数实例
- 1 导入库并加载数据
- 2 实例
- 例1:指定行索引index参数
- 例2:指定要聚合的列
- 例3:指定列索引columns参数
- 例4:指定聚合的统计函数
- 例5:设置两层索引
- 例6:设置加入汇总列
- 例7:指定缺失值填充
一、pivot_table函数定义
pivot_table函数是pandas库中的函数,调用首先需要加载pandas库。其功能相当于excel中的数据透视表。其基本调用语法如下:
import pandas as pd
pd.pivot_table(data: 'DataFrame', values=None, index=None, columns=None, aggfunc: 'AggFuncType' = 'mean', fill_value=None, margins: 'bool' = False, dropna: 'bool' = True, margins_name: 'str' = 'All', observed: 'bool' = False, sort: 'bool' = True)
data:数据集。
values:要聚合的列,默认对所有数值型变量聚合。
index:设置透视表中的行索引名。
columns:设置透视表中的列索引名。
aggfunc:聚合统计函数,可以是单个函数、函数列表、字典格式,默认为均值。当该参数传入字典格式时,key为列名,value为聚合函数值,此时values参数无效。
fill_value:缺失值填充值,默认为NaN,即不对缺失值做处理。注意这里的缺失值是指透视后结果中可能存在的缺失值,而非透视前原表中的缺失值。
margins:指定是否加入汇总列,默认为False。
margins_name:汇总列的列名,与margins配套使用,默认为‘All’,当margins为False时,该参数无作用。
dropna:是否删除汇总结果中全为NaN的行或列,默认为True。
二、pivot_table函数实例
1 导入库并加载数据
首先导入本文需要的库并加载数据,如果你有些库还没有安装,导致运行代码时报错,可以在Anaconda Prompt中用pip方法安装。
import os
import numpy as np
import pandas as pd
os.chdir(r'G:\python\17_python中常用函数')
date = pd.read_excel('date.xlsx', sheet_name='ori')
date
os.chdir:设置数据存放的文件路径。
pd.read_excel:读取数据。
得到结果:
以上数据集只是为了清晰地理解pivot_table函数所创造,并无实际含义。
2 实例
例1:指定行索引index参数
我们先来看下只设置一个index参数,其余参数采用默认值,会是什么效果,代码如下:
pd.pivot_table(date, index="课程")
得到结果:
从结果知,当pivot_table只设置一个index参数时,相当于把index中的参数当成行,对数据表中所有数值列求平均值。类似excel中如下情形:
例2:指定要聚合的列
接着来看下应用values参数选择要聚合的列进行展示,代码如下:
pd.pivot_table(date, index="课程", values=['综合成绩'])
得到结果:
对比例1可以发现,values不设置时,默认对数据表中所有数值列进行聚合。如果只想对某些列进行聚合,可以在values参数中进行指定。
例3:指定列索引columns参数
接着来看下应用columns参数选择要聚合的列进行展示,代码如下:
pd.pivot_table(date, index=["课程"], columns=['教师'], values=['综合成绩'])
得到结果:
类似excel中的如下设置:
例4:指定聚合的统计函数
如果aggfunc函数不指定聚合的函数,默认计算均值,接下来试下求和函数看看效果,代码如下:
pd.pivot_table(date, index="课程", values=['综合成绩'], aggfunc=np.sum)
得到结果:
从结果知,可以根据需求自行在aggfunc函数中指定要聚合的函数。
例5:设置两层索引
接下来看下在index参数中设置2个变量,构造两层索引的效果,代码如下:
pd.pivot_table(date, index=["课程", '教师'], values=['综合成绩'])
得到结果:
类似在excel中如下设置:
例6:设置加入汇总列
接着设置加入汇总列,代码如下:
pd.pivot_table(date, index="课程", values=['综合成绩'], margins=True)
得到结果:
例7:指定缺失值填充
最后设置缺失值填充,代码如下:
pd.pivot_table(date, index=["课程"], columns=['教师'], values=['综合成绩'], fill_value='空值')
得到结果:
对比例3,可以理解fill_value填充缺失值,是指填充透视后结果中存在的缺失值,而非透视前原表中的缺失值。