前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Python 生成 Excel 报表。

用 Python 生成 Excel 报表。

作者头像
周萝卜
发布2021-11-16 15:25:56
1.2K0
发布2021-11-16 15:25:56
举报
文章被收录于专栏:萝卜大杂烩萝卜大杂烩

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

原始数据:

目的数据:

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

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

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

先来进行透视表转换

代码语言:javascript
复制
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

代码语言:javascript
复制
table.xs('Debra Henley', level=0)

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

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

代码语言:javascript
复制
table.xs(('Debra Henley','Craig Booker'), level=0)

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

代码语言:javascript
复制
table.index.get_level_values(0)
table.index.get_level_values(1)
table.index.get_level_values(0).unique()

Output:

代码语言:javascript
复制
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')
代码语言:javascript
复制
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')
代码语言:javascript
复制
Index(['Debra Henley', 'Fred Anderson'], dtype='object', name='Manager')

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

代码语言:javascript
复制
for manager in table.index.get_level_values(0).unique():
    print(table.xs(manager, level=0))

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

代码语言:javascript
复制
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 当中进行的,下面我们把相关代码封装下,通过命令行来执行

代码语言:javascript
复制
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)

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萝卜大杂烩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档