为什么越来越多的非程序员白领都开始学习 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
以上就是利用python汇总统计多张Excel的详细内容,更多关于python汇总统计多张Excel的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】