Python自动化小技巧16——分类汇总写入excel不同sheet表
案例背景
上了两个月班的社畜博主最近终于有空来总结一下最近写的代码了。
因为上班都是文职工作,天天不是word就是excel就是PPT和pdf....这和什么机器学习还有数据科学不一样,任务更多的是处理实在的文字和表格等格式,按照领导要求来完成,数据什么都是次要的,主要是格式要求,数据运算最多都是加减乘除,都很简单。但是怎么呈现给领导看就会让代码过程变得复杂。
本次就是对一些固定资产进行一个分类汇总,比如领导想看我们固定资产里面有什么呀,有几台车,几个房屋,几台电脑,他们原值都是多少钱,折旧了多少钱....需要每一类的汇总,然后汇总了还不够,他还想看看每一类的明细.....总之就是很麻烦,如果没有python的话,那就是excel筛选,然后对每一类都进行复制,最后一行写一个sum()函数....再把所有的sum()行复制到一起,来一个整体的sum......
这种重复性的工作还是给代码来吧,所实话,类别多的情况下,写代码的时间都比复制粘贴的时间快,而且代码还能一直用,下次再来个什么别的东西进行分类汇总也是很方便的.....
明确目标
上面也说了,就是格式要求麻烦,对这样一个资产的表进行分类统计:

我们需要对每种类别的资产都分开写入不同的sheet里面,后面都加上一行汇总项,然后还需要做一个总的汇总表。
(有些位置和数值都打了马赛克.....当然是怕信息泄露...)
代码实现
先导入包:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsplt.rcParams ['font.sans-serif'] ='SimHei' #显示中文
plt.rcParams ['axes.unicode_minus']=False #显示负号
import xlrd,openpyxl
还是数据分析四件套,但可能这个案例不需要,,,另外我现在习惯导入xlrd,openpyxl这两个处理excel表的包,虽然这个案例没用到,后面会用的。这个案例只依靠pandas就行。
读取数据,可以看到上面的表前两行没什么用,就跳过读取,然后把资产类别这一列变为字符串型进行读取,因为它有‘03’这种读取的话会默认变成数值型就变成‘3’了.....还进行了筛选,在用的资产都拿出来,报废的资产就不做统计了。
df=pd.read_excel('资产任意汇总表.xls',converters={'资产类别': str},skiprows=2)
df=df.iloc[:,2:].query("资产状态名称=='在用'").reset_index(drop=True)
df.head(2)

可以看到数据大概有哪些变量。我们主要是对资产类别名称这一列进行分类。然后再统计汇总,
我这里还做了一点小处理,主要是有的资产类别不对,需要进行替换映射一下,采用编号相同的情况下进行替换
df_change=pd.read_excel('资产变动台账.xls',converters={'资产编号': str},skiprows=2)
df_change[['新类别编号', '新类别名称']] = df_change['资产类别-变后值'].str.split('_', expand=True)
for num in df_change['资产编号'].unique():df.loc[df['资产编号'] == num, '资产类别'] = df_change.loc[df_change['资产编号'] == num, '新类别编号'].to_numpy()[0]df.loc[df['资产编号'] == num, '资产类别名称'] = df_change.loc[df_change['资产编号'] == num, '新类别名称'].to_numpy()[0]
查看资产类别数量统计:
df['资产类别'].value_counts()

这些事类别的代号,然后写个字典,让代号和名称一一对应:
asset_category={'01': '公路及构筑物', '02': '房屋及建筑物', '03': '机械设备', '04': '运输设备', '05': '办公及电子设备', '06': '仪器及实验设备', '07': '安全设施', '08': '收费设施', '09': '通信监控设施', '10': '融资租赁及改良支出', '98': '土地', '99': '其他','0201': '办公用房','0202': '职工用房','0203': '仓库','0204': '客运站房屋','0205': '厂房','0206': '服务区','0207': '站所用房','02101': '非生产用房','02102': '建筑物及附属设施','02103': '房屋建筑物','0299': '其他','0301': '施工机械','0302': '生产及动力设备','0399': '其他','0401': '生产车辆','0402': '营运车辆','0403': '办公用车','0499': '其他','9901':'广告牌','9902':'其他设备'}
(df['资产类别'].map(asset_category)==df['资产类别名称']).all()

这里的true表示数据里面的代号和名称都是一致的。
资产分类计算导出
开始正式的分类汇总的代码:
查看类型:
df['资产类别名称'].unique()

直接计算汇总表,并且在最后一行加上汇总项:
df_sums=df.groupby('资产类别名称').sum(numeric_only=True).T.assign(汇总=lambda x:x.sum(1)).T
df_sums

可以看到最后一行是汇总行,这是只保留的数值型数据的汇总,文字型数据都不见了。
如果需要明细,这种只保留数值是不行的。
我们自定义一个函数,可以对数据框加一行汇总,数值型数据就求和,字符串就为空:
def add_summary_row(df):numeric_df = df.select_dtypes(include=['number'])summary = numeric_df.sum()for col in df.columns.difference(numeric_df.columns):summary[col] = Noneresult_df = pd.concat([df, pd.DataFrame(summary).T])result_df.index = list(range(len(df.index))) + ['汇总']return result_df
然后把每一类资产都进行这个函数的处理,写入excel不同的sheet里面,再加上一个汇总项表:
sheets = {'办公用房': '房屋建筑物','办公及电子设备': '办公及电子设备', '生产及动力设备': '生产及动力设备', '办公用车': '办公车辆', '生产车辆': '生产车辆', '安全设施': '安全设施', '其他设备': '家具和其他','汇总':'汇总'}
with pd.ExcelWriter('汇总.xlsx') as writer:for key, value in sheets.items():df_temp=df[df['资产类别名称'] == key] #取出每一类框df_temp=add_summary_row(df_temp) #添加汇总项df_temp.to_excel(writer, sheet_name=f'{value}{len(df_temp)-1:.0f}') #写入sheet,名称+数量df_sums.index=df_sums.index.map(sheets)df_sums.to_excel(writer, sheet_name='汇总') #写入汇总表
完成!!看看效果:


可以看到下面很多sheet,分门别类了,数字是这个类型的资产有多少个。最后都有汇总,还有总汇总表。
相关文章:
Python自动化小技巧16——分类汇总写入excel不同sheet表
案例背景 上了两个月班的社畜博主最近终于有空来总结一下最近写的代码了。 因为上班都是文职工作,天天不是word就是excel就是PPT和pdf....这和什么机器学习还有数据科学不一样,任务更多的是处理实在的文字和表格等格式,按照领导要求来完成&…...
FlexRay汽车总线静电防护,如何设计保护方案图?
FlexRay是一种高速、实时、可靠、具备故障容错能力的总线技术,是继CAN和LIN总线之后的最新研发成果。FlexRay为线控应用(即线控驱动、线控转向、线控制动等)提供了容错和时间确定性性能要求。虽然FlexRay将解决当前高端和未来主流车载网络的挑…...
jpg图片太大怎么压缩?这样做轻松压缩图片
图片太大会给存储、分享带来麻烦,但其实现在压缩图片大小也不是什么难事,下面就给大家分享几个一直用的图片压缩方法,包含批量压缩、在线压缩、免费压缩等多种方式,大家按需自取哈~ 方法一:嗨格式压缩大师 这是一个可…...
B057-spring增强 依赖注入 AOP 代理模式 创建Bean
目录 AOP概念代理模式引出AOP实现方式xml方式实现注解方式实现 AOP 概念 事务管理:比如可以抽取try catch的重复代码 日志监控:比如业务逻辑前后打印关于当前订单数量的日志,了解业务做了什么 性能监控:比如业务前后打印时间&…...
小程序多图片组合
目录 子组件 index.js 子组件 index.wxml 子组件 index.wxss 父组件引用: 子组件:preview-image 子组件 index.js Component({properties: {previewData: {type: Array,default: [],observer: function (newVal, oldVal) {console.log(newVal, ol…...
YOLO v8目标跟踪详细解读(二)
上一篇,结合代码,我们详细的介绍了YOLOV8目标跟踪的Pipeline。大家应该对跟踪的流程有了大致的了解,下面我们将对跟踪中出现的卡尔曼滤波进行解读。 1.卡尔曼滤波器介绍 卡尔曼滤波(kalman Filtering)是一种利用线性…...
【广州华锐视点】AR电力职业技能培训系统让技能学习更“智慧”
随着科技的发展,教育方式也在不断地进步和创新。其中,增强现实(AR)技术的出现,为教育领域带来了全新的可能。AR电力职业技能培训系统就是这种创新教学方法的完美实践,它将虚拟与现实相结合,为学生提供了一个沉浸式的学…...
C#学习,反射
目录 C#学习 .NET的体系结构 二次编译 反射 什么是反射? 什么是Type? 什么是程序集? 反射API: 一,程序集 1, Load 2,LoadFrom 3,LoadFile 二,类型实例 1&a…...
代理模式概述
1.代理模式概述 学习内容 1)概述 为什么要有 “代理” ? 生活中就有很多例子,比如委托业务,黄牛(票贩子)等等代理就是被代理者没有能力或者不愿意去完成某件事情,需要找个人代替自己去完成这…...
最新AI系统ChatGPT网站程序源码+搭建教程/公众号/H5端/安装配置教程/完整知识库
1、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!…...
前端Flex布局
day06-Flex布局 目标:熟练使用 Flex 完成结构化布局 01-标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 [外链图片转存失败,源站可能有防盗链机制,建议…...
文盘Rust -- Mutex解决并发写文件乱序问题 | 京东云技术团队
在实际开发过程中,我们可能会遇到并发写文件的场景,如果处理不当很可能出现文件内容乱序问题。下面我们通过一个示例程序描述这一过程并给出解决该问题的方法。 use std::{fs::{self, File, OpenOptions},io::{Write},sync::Arc,time::{SystemTime, UNI…...
数据结构算法--2 冒泡排序,选择排序,插入排序
基础排序算法 冒泡排序 思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一…...
秋招面经——快手
Mysql mysql事务 共享锁与排他锁 共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。(读都允许读,但我在读不允许你去改) 排他锁:允许一个事务去读一行,阻止其他事务获得相同…...
【STM32RT-Thread零基础入门】 2. 新建RT-Thread项目
硬件:STM32F103ZET6、ST-LINK、usb转串口工具 文章目录 前言一、新建RT-Thread项目二、项目结构三、构建项目四、下载程序(调试器下载)五、终端交互总结 前言 RT-Thread的全称是Real Time Thread,顾名思义,它是一个嵌…...
别人直播的时候怎么录屏?分享一些录屏方法
随着互联网的快速发展,直播已经成为人们日常生活中不可或缺的一部分。但是,有时候我们可能会错过某些重要的直播内容,这时候就需要录屏来保存和观看。那么,如何录屏别人的直播呢?本文将分享一些录屏方法和技巧&#…...
React Native 在高IOS版本下无法显示图片的问题处理
图片在低ios版本下可以看到图片,在高版本ios下显示不了图片 直接上解决方法 找文件 /node_modules/react-native/Libraries/Image/RCTUIImageViewAnimated.m 修改源码 原代码 if (_currentFrame) {layer.contentsScale self.animatedImageScale;layer.contents…...
SSH远程连接MacOS catalina并进行终端颜色配置
一、开关SSH服务 在虚拟机上安装了MacOS catalina,想要使用SSH远程进行连接,但是使用“系统偏好设置”/“共享”/“远程登录”开关进行打开,却一直是正在启动“远程登录”: 难道是catalina有BUG?不过还是有方法的&…...
用JSON.toJSONString转JSON时,属性的值为null时,输出的JSON里没有该属性
1、问题 用JSON.toJSONString转JSON时,当属性值为null的话,转出来的JSON里没有了值为null的属性,属性丢失了 2、原因 用fastjson将java对象转json字符串时会默认去除空字段 2、解决办法 在JSON.toJSONString方法加上SerializerFeature这一…...
Java版企业电子招标采购系统源码—企业战略布局下的采购寻源tbms
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
