首页 文章详情

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

数据森麟 | 162 2021-11-26 18:59 0 0 0
UniSMS (合一短信)


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

     作者:周萝卜

     来源:萝卜大杂烩

财务小妹

萝卜哥,求助!

人有三急,回见~

萝卜


财务小妹

别啊,不能去!

这,到底啥事啊

萝卜

财务小妹

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

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

萝卜

财务小妹

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

当真?我来看看

萝卜

财务小妹的需求


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


原始数据:



目的数据:



每一个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


接下来应用 xs

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


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


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

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


接下来我们还需要用到 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))


最后把数据保存到新的 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)


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


财务小妹

哇,好棒哦~

嘿嘿,一般一般

萝卜


财务小妹

嗯嗯,那我先下班喽

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

萝卜


财务小妹

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

。。。

萝卜


◆ ◆ ◆  ◆ 

麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:



数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。


管理员二维码:

猜你喜欢

 卧槽!原来爬取B站弹幕这么简单

 厉害了!麟哥新书登顶京东销量排行榜!

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 你相信逛B站也能学编程吗

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter