【转载】使用Pandas创建数据透视表
使用Pandas创建数据透视表
本文转载自:蓝鲸的网站分析笔记
原文链接:使用Pandas创建数据透视表
目录
数据透视表是Excel中最常用的数据汇总工具,它可以根据一个或多个制定的维度对数据进行聚合。在python中同样可以通过pandas.pivot_table函数来实现这些功能。本篇文章将介绍 pandas.pivot_table函数与Excel数据透视表之间的联系,以及具体的使用方法。文章中的数据源来自Lending Club 2017-2011年的公开数据。
pandas数据透视表函数
pandas.pivot_table函数中包含四个主要的变量,以及一些可选择使用的参数。四个主要的变量分别是数据源data,行索引index,列columns,和数值values。可选择使用的参数包括数值的汇总 方式,NaN值的处理方式,以及是否显示汇总行数据等。下面是Pandas官网给出的函数说明。
我们将pandas.pivot_table函数与Excel的数据透视表界面做了一个对比,并用不同的颜色和连线画出了两者之间的联系。在其中可以发现pandas.pivot_table的行索引index,列,和数值分别对 应了Excel数据透视表中的行,列和值三个部分。在实际的操作中Excel是将字段拖拽到相应的字段区间中,而在pandas.pivot_table中只需要将字段的的名称输入到等号后面就可以了。下面我们 来看下pandas.pivot_table具体的使用方法。
首先导入需要使用的numpy和pandas功能库,numpy用于数值计算,Pandas是基于numpy构建的用于科学计算的功能库,pandas.pivot_table是Pandas库(pd)中的函数。然后读取Lending Club数据 ,并生成名为lc的数据表。
1
2
3
|
import pandas as pd import numpy as np lc = pd.DataFrame(pd.read_csv( 'LoanStats3a.csv' ,header = 1 )) |
创建简单的数据透视表
我们选择Lending Club数据表中的贷款期限和贷款总额字段来创建一个简单的数据透视表。按贷款期限维度对贷款总额进行聚合,将贷款期限字段(term)放在行索引lndex中,贷款总额字段 (loan_amnt)放在值values中,生成按不同贷款期限维度聚合的贷款总额数据。这里需要说明的是在默认情况下pandas.pivot_table对指标的汇总方式是计算平均值。 因此下面的表中显示的是不 同贷款期限的贷款平均值数据。这个简单的数据透视表只有一个维度和一个指标。下面我们将为这个数据透视表增加更多的维度和指标,并增加更多的指标汇总计算方式。
1
|
pd.pivot_table(lc,index = [ "term" ],values = [ "loan_amnt" ]) |
增加一个行维度(index)
在贷款期限的维度上增加贷款用户等级维度,创建一个双维度的数据透视表,在pandas.pivot_table的行索引index中增加贷款用户等级字段(grade)。这样在行索引维度index中共包含了两个维 度,主维度贷款期限(term)和次级维度贷款用户等级(grade)。指标是按不同贷款期限下贷款用户等级分布进行汇总贷款金额平均值。与之前相比指标数据经过次级维度的细分变的更加精细。
1
|
pd.pivot_table(lc,index = [ "term" , "grade" ],values = [ "loan_amnt" ]) |
通过调整pandas.pivot_table函数中不同维度的位置可以更改数据透视表中维度的层级,以及数据的显示方式。这里我们将前面代码行索引中两个字段位置互换,此时贷款用户等级(grade)成了主维度,贷款期限(term)变成了次级维度。
1
|
pd.pivot_table(lc,index = [ "grade" , "term" ],values = [ "loan_amnt" ]) |

增加一个值变量(value)
除了增加次级维度以外,还可以增加需要汇总的数据值。在前面数据透视表的基础上我们增加总利息字段作为第二个汇总值。方法与前面增加次级维度很相似,将需要增加的字段放在值values中即可。下面是具体的代码和生成的数据透视表,其中total_rec_int是新增的值values变量。这里需要再次说明的是,默认情况下pandas.pivot_table按平均值对数据进行汇总。
1
|
pd.pivot_table(lc,index = [ "grade" , "term" ],values = [ "loan_amnt" , "total_rec_int" ]) |

更改数值汇总方式
若要更改pandas.pivot_table对值values的汇总方式需要在代码中进行设置,下面将贷款总额和总利息字段的汇总方式改为求和。方法是在代码中加入aggfunc=np.sum。新生成的数据透视表中值字段的计算方式就由之前的平均值改为了求和值。
1
|
pd.pivot_table(lc,index = [ "grade" , "term" ],values[ "loan_amnt" , "total_rec_int" ],aggfunc = np. sum ) |

增加数值汇总方式
除了可以对值变量values计算平均值和求和以外,还可以进行计数。下面我们在上面数据透视表的基础上分别对贷款总额和总利息字段进行求和,平均值和技术的计算。具体方法是代码中增加以下内容aggfunc=[np.sum,np.mean,len]),aggfunc是汇总方式,np.sum表示求和,np.mean表示计算平均值,len表示计数。在下面新创建的数据透视表中可以看到,求和sum部分,平均值mean部
分和计数len部分的计算结果。
1
|
pd.pivot_table(lc,index = [ "grade" , "term" ],values = [ "loan_amnt" , "total_rec_int" ],aggfunc = [np. sum ,np.mean, len ]) |
如果数据表中包含有NaN值,并且在之前的清洗中没有进行处理,也可以在生成数据透视表的过程中进行处理或替换。在pandas.pivot_table函数中有两种处理NaN值的方式,第一种是将NaN值替换为0。第二种为放弃NaN值,也就是说包含有NaN值的数据条目不参加计算。这里我们使用第一种方法,将NaN值替换为0。具体方法是在代码中添加以下部分fill_value=0。
1
|
pd.pivot_table(lc,index = [ "grade" , "term" ],values = [ "loan_amnt" , "total_rec_int" ],aggfunc = [np. sum ,np.mean, len ],fill_value = 0 ) |
增加一个列维度(columns)
pandas.pivot_table函数也支持列维度。在Excel中需要将对应的字段拖到列区域中,在Pandas中的方法是增加列columns,并将对应的字段名称放在列columns变量的值中。下面是具体的代码,其中columns=[“home_ownership”]是新增加的部分,表示在数据表中增加列维度home_ownership。
1
|
pd.pivot_table(lc,index = [ "grade" ],values = [ "loan_amnt" ],columns = [ "home_ownership" ],aggfunc = [np. sum ],fill_value = 0 ) |
增加多个列维度
与行索引一样,列columns中也可以增加多个维度,方法与增加行维度和值一样,这里不再赘述。下面是具体的代码,其中columns=[“home_ownership”,”term”]是发生变化的部分,表示列中新增了贷款期限term维度。home_owership为主维度,term为次级维度。
1
|
pd.pivot_table(lc,index = [ "grade" ],values = [ "loan_amnt" ],columns = [ "home_ownership" , "term" ],aggfunc = [np. sum ],fill_value = 0 ) |
增加数据汇总值
pandas.pivot_table函数中的margins参数用于增加数据透视表的汇总值。默认情况下margins的状态为False。需要增加透视表的汇总值时将margins值改为True即可。此时数据透视表将显示不同维度下数据的汇总值。汇总值的计算方式以aggfunc的一致。换句话说,如果aggfunc中设置的是求和,那么汇总值也是求和值。
1
|
pd.pivot_table(lc,index = [ "grade" ],values = [ "loan_amnt" ],columns = [ "home_ownership" , "term" ],aggfunc = [np. sum ],fill_value = 0 ,margins = True ) |
最后,我们总结下pandas.pivot_table函数与数据透视表的对应关系。将每部分以不同颜色进行区分,index对应了数据透视表中行的索引部分(浅蓝色),values对应了数值的部分(绿色),columns对应了列的部分,(橙色表示主维度,黄色表示次级维度),aggfunc对应了数值的计算方式(紫色),并显示数据透视表的最顶部进行说明(sum)。Margins对应了数据透视表中值汇总的部分 (深蓝色)。
【转载】使用Pandas创建数据透视表的更多相关文章
- Excel应用程序如何创建数据透视表
原文作者:andreww 原文链接: http://blogs.msdn.com/andreww/archive/2008/07/25/creating-a-pivottable-programmat ...
- LibreOffice创建数据透视表
LibreOffice创建数据透视表 LibreOffice: 选中数据,Data->Pivot Table->Create,拖拽行.列到Row和column,Data Filed要点击O ...
- 【Excle数据透视】二维数据如何创建数据透视表
二维数据在创建数据透视表的时候,可能会给你带来一些麻烦,没法创建,会丢失维度,那怎么办呢? 解决办法:使用数据透视表和数据透视图向导即可创建 具体操作如下: 按下[Alt+D+P],出现如下界面 选择 ...
- python pandas使用数据透视表
1) 官网啰嗦这一堆, pandas.pivot_table函数中包含四个主要的变量,以及一些可选择使用的参数.四个主要的变量分别是数据源data,行索引index,列columns,和数值value ...
- Java 创建 Excel 数据透视表
Excel 数据透视表具有强大的数据处理功能,能够使表格中的数据更加直观化.使用Excel 数据透视表,能方便用户快速的排序. 筛选各种数据,同时也能满足用户对不同数据汇总的需求.本文将介绍如何在Ja ...
- C# 操作Excel数据透视表
一.概述 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行号.列标和页字段.当改变版面布置时,数据透视表也会按照新的 ...
- EXCEL 2010学习笔记 —— 数据透视表
今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...
- 我们无法找到服务器加载工作簿的数据模型"的 SharePoint 网站,当您刷新 Excel 2013 工作簿中的数据透视表时出错
假定您使用 Analysis Services 源在 Microsoft Excel 2013 中创建数据透视表.将 Excel 工作簿上载到 Microsoft SharePoint 网站中.当您尝 ...
- VSTO学习笔记(十四)Excel数据透视表与PowerPivot
原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...
随机推荐
- Eclipse Kelper 设置代理服务器无效解决方案
Open Network Connection Settings. Select Active Provider to "Manual". Set HTTP/HTTPS proxy ...
- Linux下5种IO模型的小结
概述 接触网络编程,我们时常会与各种与IO相关的概念打交道:同步(Synchronous).异步(ASynchronous).阻塞(blocking)和非阻塞(non-blocking).关于概念的区 ...
- 2015.2.16 关于delphi web控件打开新网页时弹出关闭页面(js代码)出错的解决办法研究
参考网址1:http://www.csharpwin.com/csharpspace/2360.shtml...参考网址2:http://www.oschina.net/question/234345 ...
- 帆软报表FineReport中数据连接之Websphere配置JNDI连接
以oracle9i数据源制作的模板jndi.cpt为例来说明如何在FineReport中的Websphere配置JNDI连接.由于常用服务器的JNDI驱动过大,帆软报表FineReport中没有自带, ...
- [转]什么鬼,又不知道怎么命名class了
(本文作者Mrcxt,原文链接:http://blog.csdn.net/mrcxt/article/details/52038884) 相信写css的人都会遇到下面的问题: 糟糕,怎么命名这个cla ...
- java1.8常用的函数式接口
//常用函数式接口 final ; //num++; //第一个为传入参数的类型:第二个为返回数据的类型 Function<int[],String> function = (from) ...
- NUOJ 88
思路1: 找规律,本题若是直接暴力搜索,就是f(n)=2^n-1,然后f(n)%1000000,那么结果会越界:所以考虑用f(n+1)=(2*f(n)+1)%1000000,不过遇到较大数据的时候,会 ...
- Dubbo消费端错误: ClassNotFoundException: org.apache.zookeeper.proto.WatcherEvent
出现错误的原因是消费端war没有启动成功, 但是zkClient和Dubbo的对应Thread启动了, web container无法加载对应的类, INFO: Initializing Protoc ...
- libpng使用
自己的实现 unsigned int component(png_const_bytep row, png_uint_32 x, unsigned int c, unsigned int bit_de ...
- Linux 进程间通讯详解六
ftok()函数 key_t ftok(const char *pathname, int proj_id); --功能:创建系统建立IPC通讯 (消息队列.信号量和共享内存) 时key值 --参数 ...