利用python汇总统计多张Excel
作者:python技术 发布时间:2023-12-31 14:22:11
为什么越来越多的非程序员白领都开始学习 Python ?他们可能并不是想要学习 Python 去爬取一些网站从而获得酷酷的成就感,而是工作中遇到好多数据分析处理的问题,用 Python 就可以简单高效地解决。本文就通过一个实际的例子来给大家展示一下 Python 是如何应用于实际工作中高效解决复杂问题的。
背景
小明就职于一家户外运动专营公司,他们公司旗下有好多个品牌,并且涉及到很多细分的行业。小明在这家公司任数据分析师,平时都是通过 Excel 来做数据分析的。今天老板丢给他一个任务:下班前筛选出集团公司旗下最近一年销售额前五名的品牌以及销售额。
对于 Excel 大佬来说,这不就是分分钟的事吗?小明并没有放在眼里,直到市场部的同事将原始的数据文件发给他,他才意识到事情并没有那么简单:
这并不是想象中的排序取前五就行了。这总共有90个文件,按常规的思路来看,他要么将所有文件的内容复制到一张表中进行分类汇总,要么将每张表格进行分类汇总,然后再最最终结果进行分类汇总。
想想这工作量,再想想截止时间,小明挠了挠头,感觉到要渐渐头秃。
思路分析
这种体力活,写程序解决是最轻松的啦。小明这时候想到了他的程序员好朋友小段,于是他把这个问题抛给了小段。
小段缕了下他那所剩无几的头发,说:so easy,只需要找潘大师即可。
小明说:你搞不定吗?还要找其他人!
小段苦笑说:不不不,潘大师是 Python 里面一个处理数据的库,叫 Pandas ,俗称 潘大师。
小明说:我不管什么大师不大师,就说需要多久搞定。
小段说:给我几分钟写程序,再跑几秒钟就好了!
小明发过去了膜拜大佬的表情。
小段略微思考了下,整理了一下程序思路:
计算每张表每一行的销售额,用“访客数 * 转化率 * 客单价”就行。
将每张表格根据品牌汇总销售额。
将所有表格的结果汇总成一张总表
在总表中根据品牌汇总销售额并排序
编码
第零步,读取 Excel :
import pandas as pd
df = pd.read_excel("./tables/" + name)
第一步,计算每张表格内的销售额:
df['销售额'] = df['访客数'] * df['转化率'] * df['客单价']
第二步,将每张表格根据品牌汇总销售额:
df_sum = df.groupby('品牌')['销售额'].sum().reset_index()
第三步,将所有表格的结果汇总成一张总表:
result = pd.DataFrame()
result = pd.concat([result, df_sum])
第四步,在总表中根据品牌汇总销售额并排序:
final = result.groupby('品牌')['销售额'].sum().reset_index().sort_values('销售额', ascending=False)
最后,我们来看看完整的程序:
import pandas as pd
import os
result = pd.DataFrame()
for name in os.listdir("./tables"):
try:
df = pd.read_excel("./tables/" + name)
df['销售额'] = df['访客数'] * df['转化率'] * df['客单价']
df_sum = df.groupby('品牌')['销售额'].sum().reset_index()
result = pd.concat([result, df_sum])
except:
print(name)
pass
final = result.groupby('品牌')['销售额'].sum().reset_index().sort_values('销售额', ascending=False)
pd.set_option('display.float_format', lambda x: '%.2f' % x)
print(final.head())
最后的结果是这样的:
品牌 销售额
15 品牌-5 1078060923.62
8 品牌-17 1064495314.96
4 品牌-13 1038560274.21
3 品牌-12 1026115153.00
13 品牌-3 1006908609.07
可以看到最终的前五已经出来了,整个程序运行起来还是很快的。
几分钟之后,小段就把结果给小明发过去了,小明感动得内牛满面,直呼改天请吃饭,拜师学艺!
总结
本文主要是想通过一个实际的案例来向大家展示潘大师(Pandas)的魅力,特别是应用于这种表格处理,可以说是太方便了。写过程序的可能都有点熟悉的感觉,这种处理方式有点类似于 SQL 查询语句。潘大师不仅能使我们的程序处理起来变得更简单高效,对于需要经常处理表格的非程序员也是非常友好的,上手起来也比较简单。
示例代码:https://github.com/JustDoPython/python-examples/tree/master/xianhuan/pandasexcel
来源:http://www.justdopython.com/2020/09/20/pandasexcel/?utm_source=tuicool&utm_medium=referral
猜你喜欢
- system函数 说明:执行外部程序并显示输出资料。 语法:string system(string command, int [retur
- 一、什么是模块容器 -> 数据的封装函数 -> 语句的封装类 -> 方法和属性的封装模块 -> 模块就是程序,模块就
- Python学习第一篇。把之前学习的Python基础知识总结一下。一、认识Python首先我们得清楚这个:Python这个名字是从Monty
- 一、功能简述正是微博如火如荼的时节,其中各个微博的分享功能是网站推广产品的好东东啊,此时如何方便快捷的使用微博的分享功能就显得比较重要了。我
- Python爬取网页信息的步骤以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评
- JavaScript 中的并没有提供像 VBScript 里的 DateAdd 方法用于日
- 求3721,163,1,4832,1980,2008,68686688,9999,17173,5173,8848中最大的数明白后,试着求一下
- ASP+Access数据库的18条安全法则:1.首先,我们需要过滤所有客户端提交的内容,其中包括?id=N一类,另外还有提交的html代码中
- 07年,我是极力推崇网站规范制作,好处很多,对商业,对用户,对设计师。我们走了两年,现在有了一定的成效,我们也看到了规范所带来的好处和便利。
- CSS3的box-shadow属性可以让我们轻松实现图层阴影效果。我们来实战详解一下这个属性。1. box-shadow属性的浏览器兼容性先
- 一、数组的创建方式一var a = new Array(); a[0]="wo"
- 本书的作者Douglas Crockford是JavaScript开发社区最知名的权威,JavaScript的发明人Brendan Eich
- 本文向大家分享23种JavaScript提高执行效率的小技巧、最佳实践等非常实用的内容。当然JavaScript的实用技巧不止这些,还有很多
- window对象表示浏览器中打开的窗口,提供关于窗口状态的信息。可以用window对象访问窗口中绘制的文档、窗口中发生的事件和影响窗口的浏览
- 一般在Django的视图函数中使用request.POST来获取请求体,request.POST是QueryDict类,通常作为dict来使
- Python语言与Perl,C和Java等语言有许多相似之处。但是,也存在一些差异。在本章中我们将来学习Python的基础语法,让你快速学会
- 如何一行行地读取文件?这样就可以做到一行行地读出了:dim input(30) ' 定义一个数组,大小
- 前言反爬虫是网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,一般情况下除了百度等网站,反扒机制会常常更新以外。为了保
- 一旦你已经为MySQL实例管理器设置了一个密码文件并且IM正在运行,你可以连接它。你可以使用mysql客户端工具通过标准MySQL API来
- 本文介绍了使用Application来统计访问网站的在线人数的方法,并介绍了使用Application时应该注意的事项。首先讲明白,用ASP