利用python汇总统计多张Excel


Posted in Python onSeptember 22, 2020

为什么越来越多的非程序员白领都开始学习 Python ?他们可能并不是想要学习 Python 去爬取一些网站从而获得酷酷的成就感,而是工作中遇到好多数据分析处理的问题,用 Python 就可以简单高效地解决。本文就通过一个实际的例子来给大家展示一下 Python 是如何应用于实际工作中高效解决复杂问题的。

背景

小明就职于一家户外运动专营公司,他们公司旗下有好多个品牌,并且涉及到很多细分的行业。小明在这家公司任数据分析师,平时都是通过 Excel 来做数据分析的。今天老板丢给他一个任务:下班前筛选出集团公司旗下最近一年销售额前五名的品牌以及销售额。

对于 Excel 大佬来说,这不就是分分钟的事吗?小明并没有放在眼里,直到市场部的同事将原始的数据文件发给他,他才意识到事情并没有那么简单:

利用python汇总统计多张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

以上就是利用python汇总统计多张Excel的详细内容,更多关于python汇总统计多张Excel的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
python中OrderedDict的使用方法详解
May 05 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 Python
pandas进行数据输入和输出的方法详解
Mar 23 Python
爬虫代理的cookie如何生成运行
Sep 22 #Python
python 如何将office文件转换为PDF
Sep 22 #Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 #Python
Python使用for生成列表实现过程解析
Sep 22 #Python
python实现发送带附件的邮件代码分享
Sep 22 #Python
使用Python绘制台风轨迹图的示例代码
Sep 21 #Python
利用python绘制中国地图(含省界、河流等)
Sep 21 #Python
You might like
基于Zookeeper的使用详解
2013/05/02 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
Python中的filter()函数的用法
2015/04/27 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
制定岗位职责的原则
2013/11/08 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
经贸日语专业个人求职信
2013/12/13 职场文书
最受欢迎的自我评价
2013/12/22 职场文书
消防安全责任书范本
2014/04/15 职场文书
搞笑老公保证书
2015/02/26 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
礼仪培训心得体会
2016/01/22 职场文书
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电