首页 > 编程语言 >一篇文章教你用python玩转数据透视表PivotTable

一篇文章教你用python玩转数据透视表PivotTable

时间:2024-09-27 10:21:56浏览次数:9  
标签:PivotTable 读取 pt field python 透视 教你用 ## 筛选

目录

建数据透视表

 

配置行列字段

添加列字段

配置“值字段”

 

关闭分类汇总

设置表格形式显示

读取数据来透视表内容

读取rowfield的内容

读取value field的内容

筛选透视表

添加行标签筛选

添加筛选标签(Pagefield)

排序透视表


 

本文主要介绍excel的数据透视表常见的操作。基本上涵盖了基本操作。

下面,先看看我们到处理的表格中的数据:

 

e37c517795ff12885b068693a7a27e4b.png

建数据透视表

先打开一个准备数据的excel文件,然后插入一个新的数据透视表。
import win32com.client as win32
from win32com.client import constants
import os
xls_app = win32.gencache.EnsureDispatch('Excel.Application')
curr_path = os.getcwd()
## 打开excel文件
wb = xls_app.Workbooks.Open(r'%s\数据透视表示例.xlsx'%curr_path)
xls_app.Visible = True # 显示excel界面,默认为隐藏
## 
ws = wb.Worksheets(1)

## 添加透视表的数据源
SrcData = ws.Range("A1:D6")
## 添加一个新的sheet,用于存放生成的透视表
pt_sht = wb.Worksheets.Add()
pt_sht.Name = "透视表"
StartPvt = pt_sht.Range("A1") ## 设置透视表插入位置
## 创建数据透视表
pt_cache = wb.PivotCaches().Create(SourceType=constants.xlDatabase, SourceData=SrcData)
pt = pt_cache.CreatePivotTable(TableDestination=StartPvt,  TableName="PivotTable1")

到此,可以在excel中看到如下效果。

 

530adb5e00311e2e7fc550d09c061dab.png

 

配置行列字段

## 添加行字段

pt.AddFields(RowFields=["部门","年龄"])

 

01ff98430a04901720b684fd92538948.png

添加列字段

pt.AddFields(ColumnFields=["部门","年龄"])

配置“值字段”

## 添加值字段 
pt.AddDataField(Field=pt.PivotFields("姓名"))

 

c1951637e98e69129ac306da10badcb4.png

 

关闭分类汇总

遍历每个域,逐个关闭分类汇总
for i in range(1,pt.RowFields.Count + 1):
	field = pt.PivotFields(i)
	subtotal_tuple = (field.Subtotals)
	subtotal_list = list(subtotal_tuple)
	for k in range(len(subtotal_tuple)):
		subtotal_list[k] = False
	field.Subtotals = subtotal_list

 

 

adcb5d0098b84bd93924b3ca15fd8428.png

设置表格形式显示

# 设置为表格形式显示 
pt.RowAxisLayout (constants.xlTabularRow)

 

2cf279628d0567f71503a31041e1dc3b.png

读取数据来透视表内容

 

读取rowfield的内容

可以直接通过读取sheet内容来读取透视表,还可以通过透视表的对象来读取。这里展示的是通过后者的方式

for pvtField in pt.RowFields:
	print(pvtField.Name)
	for item in pvtField.PivotItems():
		print('    '+item.Name)

示例中pvtField.Name为行field的标题栏,item.Name为行field的成员内容

执行结果为:

部门 
        采购 
        市场 
        行政 
        研发 
年龄 
        21 
        22 
        24 
        30 
        33 
        35 
        44

读取value field的内容

可以使用PivotValueCell直接读取透视表“值”的内容

print(pt.PivotValueCell(1, 1).Value)

这是读取第一个value单元格的内容,执行结果为:

1.0

 

筛选透视表

添加行标签筛选

pt_filter = pt.PivotFields("年龄").PivotFilters.Add2(Type=constants.xlCaptionIsLessThan,Value1="28")

参数还是写为立即数(即Valued=28),也OK。看起来对这个参数的数据类型比较宽泛。

筛选的效果:

 

b619a21f93d04257d5bcd3db577a9707.png

 

注意:过滤类型种有一个关于Value的筛选类型,这个是试用于“值筛选”的功能。

 

添加筛选标签(Pagefield)

 

c87065d030111baeb37c1ae7880bdd14.png

示例代码:

pt.PivotFields("日期").Orientation = constants.xlPageField

设置筛选值:

pt.PivotFields("日期").CurrentPage = '10/11/2022'

排序透视表

# 排序 
pt.ClearAllFilters()# 关闭所有的筛选 pt.PivotFields("年龄").AutoSort(Order=constants.xlAscending, Field='年龄')# 按照年龄升序排序
排序效果:

 

4636de661733c5afe0e4753aa396e7c1.png

排序效果使用的autosort方法的参数如下图:

 

2f75c5a917ac0f5a3ecc8d8da405d137.png

 

标签:PivotTable,读取,pt,field,python,透视,教你用,##,筛选
From: https://blog.csdn.net/flashman911/article/details/142467489

相关文章

  • python在word文档中搜索关键词,复制段落
    目录简介:打开原始word文档创建一个新的文档(存放摘抄内容)搜索关键词复制和粘贴匹配的段落简介:本文示例的流程:打开一个word文档,搜索关键词所在的段落,并将对应段落复制粘贴到新的word文档中,并标记出处文件名和页码。可以用来批量对word文档进行提取。打开原始word文......
  • 提高python读写excel单元格的效率
    目录1、批量写入一列与逐个写入一列的效率对比2、批量读取一行3、批量读取一列4、批量读取二维表格5、批量写入二维表格使用pywin32读写excel,如果逐个单元格访问,会明显感觉到执行效率很低。因为pywin32其实是python重新封装了一下com接口,交互效率本身就低。试了一......
  • [Python手撕]重排链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defreorderList(self,head:Optional[ListNode])->None:""&quo......
  • Python线程:如何让程序跑得更快?
    引言线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,这些线程共享进程的数据空间,并能并发执行,从而提高程序的效率。在Python中使用线程,可以让我们在编写网络爬虫、多任务处理等应用时更加游刃有余。接下来,我......
  • python最经典基础算法题-10
    题目001:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n【思路】:学了lambda想耍一下,结果发现官网写的比我还简洁!n=17fenmu=range(2,n+1,2)ifn%2==0elserange(1,n+1,2)s=sum(map(lambdax:1/x,fenmu))print(s)#官网参考......
  • Python线程终止:如何优雅地结束一场“舞蹈”
    引言线程终止在多线程编程中扮演着至关重要的角色。合理地管理线程生命周期不仅能够提升程序性能,还能避免内存泄漏等问题的发生。在实际开发过程中,我们常常会遇到需要提前终止某个线程的情况,比如用户请求取消正在进行的任务、系统资源紧张时需要释放部分线程以节省资源等。掌握正......
  • python 实现gradient boosting regressor梯度增强回归器算法
    gradientboostingregressor梯度增强回归器算法介绍梯度增强回归器(GradientBoostingRegressor,简称GBR)是一种集成学习算法,专门用于解决回归问题。它通过组合多个弱学习器(通常是决策树)来构建一个强大的预测模型。以下是关于梯度增强回归器算法的详细解释:原理梯度增强回......
  • Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合
    龚珀兹曲线下表数据为某跨国公司1989-2021年的年销售量数据,使用适合的模型预测该公司2022年的销售额,并得出理由。部分数据如下表(具体数据从主页资源下载):年份时序(t)总额(yt)时序应该从0开始19891138.40019902174.00119913190.55219924196.10319935230.50419946237.10519957274.......
  • Python画笔案例-064 绘制彩花之旋转羽毛
    1、绘制彩花之旋转羽毛通过python的turtle库绘制彩花之旋转羽毛,如下图:2、实现代码 绘制彩花之旋转羽毛,以下为实现代码:"""彩花之旋转羽毛.py本程序需要coloradd模块支持,安装方法:pipinstallcoloradd技术支持微信scartch8,QQ:406273900www.lix......
  • python企业员工工作流引擎的研究 0f4m7
    目录python语言技术路线框架介绍具体实现截图技术栈和环境说明解决的思路性能/安全/负载方面核心代码部分展示详细视频演示源码获取方式python语言Python的扩展性也很好,其可以利用c语言编写模块,编译链接到解释器,从而使Python能够调用该c模块中的接口。反之,C语言也能......