用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。

 
 

e67552c42639fd94991c7c8d299d198a.gif

 
 
公众号后台回复“图书“,了解更多号主新书内容

     作者:周萝卜

     来源:萝卜大杂烩

a2a78e65241760a8cfa685c1203367a4.png

财务小妹

萝卜哥,求助!

40f076f4e7e0465f67839ede513a7bde.png

人有三急,回见~

2ed832899e4ee4da95369c813c9150f9.png

147590123554327b1094c28d1681e8ca.png

萝卜

23b8065ac4d661a0615832080440fc0b.png

财务小妹

别啊,不能去!

73c6c987602e5a1111eb549d76a4c2c5.png

这,到底啥事啊

e08b15c7dcc02247dcfc6f3c5f8e9cab.png

42adac79853a2fc1592ffa8fe2b9b9f7.png

萝卜

4cc7bc0f5bd832d938fcdfed60721589.png

财务小妹

有一个超级繁琐的事情,不过感觉你和Python能帮我

320b9acf407f3bb33d5ca51e2d44f2d9.png

那你学Python吧,毕竟我也不能帮你一辈子

5bbc370c5987054085009784e1e6fd9f.png

ceafe75651d715736ba98d81743c3148.png

萝卜

c573f53a7d7959b81f11943f4d153cec.png

财务小妹

不一定哦,先帮我把这次搞定,也许能一辈子呢

8778c06fb810cbe1554d1669337a808b.png

当真?我来看看

1f73c277387099e28482276f3212707d.png

c9de725e941f4ed992f78666d13db5d7.png

萝卜

财务小妹的需求

有一个Excel数据,需要根据一定规则重新组合数据,并把不同的数据发给不同的人

原始数据:

68ffcacc64e01f9f8364741eaf7a6f42.png

目的数据:

330ea830f55ac8dd52a59a2a47642131.png

每一个tab页的数据,直接发给对应的人即可!

对于上面的数据格式转化,我们可以很自然的想到使用透视表,pivot table

然后为了达到更好的效果,我们还使用了 Pandas 当中的 DataFrame.xs 函数

先来进行透视表转换

df = pd.read_excel("sales-funnel.xlsx")
table = pd.pivot_table(df,index=["Manager","Rep","Product"],
               values=["Price","Quantity"],
               aggfunc=[np.sum,np.mean],fill_value=0)
 table

7e49a7b807628d6ca2bca1af3f656099.png

接下来应用 xs

table.xs('Debra Henley', level=0)

5b12a29e5030cfbf6b40889b500031f0.png

可以看到很轻松的就拿到了 Debra Henley 对应的数据

我们还可以继续向下钻取数据

table.xs(('Debra Henley','Craig Booker'), level=0)

7a32fb9960d73acc67d828afb9dbe130.png

接下来我们还需要用到 get_level_values 函数

table.index.get_level_values(0)
table.index.get_level_values(1)
table.index.get_level_values(0).unique()

Output:

Index(['Debra Henley', 'Debra Henley', 'Debra Henley', 'Debra Henley',
       'Debra Henley', 'Debra Henley', 'Debra Henley', 'Fred Anderson',
       'Fred Anderson', 'Fred Anderson', 'Fred Anderson', 'Fred Anderson',
       'Fred Anderson'],
      dtype='object', name='Manager')
Index(['Craig Booker', 'Craig Booker', 'Craig Booker', 'Daniel Hilton',
       'Daniel Hilton', 'John Smith', 'John Smith', 'Cedric Moss',
       'Cedric Moss', 'Cedric Moss', 'Wendy Yule', 'Wendy Yule', 'Wendy Yule'],
      dtype='object', name='Rep')
Index(['Debra Henley', 'Fred Anderson'], dtype='object', name='Manager')

下面我们就可以写一个循环,依次获取到 manager 所需要的数据

for manager in table.index.get_level_values(0).unique():
    print(table.xs(manager, level=0))

9e7e9ba3138a01621caf342226f58756.png

最后把数据保存到新的 Excel 当中

writer = pd.ExcelWriter('output.xlsx')


for manager in table.index.get_level_values(0).unique():
    temp_df = table.xs(manager, level=0)
    temp_df.to_excel(writer,manager)


writer.save()

由于上述操作都是在 Jupyter Notebook 当中进行的,下面我们把相关代码封装下,通过命令行来执行

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Script to generate sales report')
    parser.add_argument('infile', type=argparse.FileType('r'),
                        help="report source file in Excel")
    parser.add_argument('outfile', type=argparse.FileType('w'),
                        help="output file in Excel")
    args = parser.parse_args()
    # We need to pass the full file name instead of the file object
    sales_report = create_pivot(args.infile.name)
    save_report(sales_report, args.outfile.name)

至此,上述需求全部完成!

a41200f26e03b105509248a8adbda1bb.png

财务小妹

哇,好棒哦~

e2377662d7ebbe5cae0a3b3e555fc1a6.png

嘿嘿,一般一般

b64054b3877a170bbda2b0d35586b5d4.png

3b5acc189145c67c8582c18345233417.png

萝卜

7ccabfd40def9a448a7e407713f678bf.png

财务小妹

嗯嗯,那我先下班喽

14b0a1b19f67572430f4038dc5794a79.png

好呀,话说咱们什么时候说说一辈子的事情

893874236ca38d38338ba1c58b18be77.png

fc1c3e8d2fa5f2809cd9a75fee51db65.png

萝卜

985d7da0451792623138131224c109b9.png

财务小妹

没问题啊,咱们要做一辈子的同事

586177822c649db8c810003ca827901f.png

。。。

a1025c8521eda416a1dea3304df48edb.png

30e2f03cd20a4b6c3fa80fa128d4de11.png

萝卜

◆ ◆ ◆  ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
 
 
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:


猜你喜欢

● 卧槽!原来爬取B站弹幕这么简单
● 厉害了!麟哥新书登顶京东销量排行榜!
● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!
● 你相信逛B站也能学编程吗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值