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

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

财务小妹的需求


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


原始数据:



微信图片_20220522150600.png


目的数据:


微信图片_20220522150603.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

微信图片_20220522150606.png


接下来应用 xs

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

微信图片_20220522150711.png


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


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

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

微信图片_20220522150740.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))

微信图片_20220522150952.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)

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


相关文章
|
19天前
|
Python
python_读写excel、csv记录
python_读写excel、csv记录
16 0
|
15天前
|
存储 Python Windows
轻松学会openpyxl库,Python处理Excel有如神助
轻松学会openpyxl库,Python处理Excel有如神助
|
15天前
|
NoSQL Python
在Python中,我们可以使用许多库来处理Excel文件
Python处理Excel常用pandas和openpyxl库。pandas的`read_excel`用于读取文件,`to_excel`写入;示例展示了数据框操作。openpyxl则用于处理复杂情况,如多工作表,`load_workbook`加载文件,`iter_rows`读取数据,`Workbook`创建新文件,写入单元格数据后保存。
25 1
|
21天前
|
Python
Python异步编程|PySimpleGUI界面读取PDF转换Excel
Python异步编程|PySimpleGUI界面读取PDF转换Excel
20 1
|
26天前
|
小程序 数据挖掘 iOS开发
Python + Excel 办公自动化 01 —— 硬菜马上就来
Python + Excel 办公自动化 01 —— 硬菜马上就来
22 1
|
26天前
|
存储 Python
终于,手把手教会 HR 实现 Python + Excel 「邮件自动化」发工资条了
终于,手把手教会 HR 实现 Python + Excel 「邮件自动化」发工资条了
31 0
|
26天前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
103 0
|
1月前
|
easyexcel
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
|
1月前
|
SQL 数据库连接 数据库
【SQL Server】2. 将数据导入导出到Excel表格当中
【SQL Server】2. 将数据导入导出到Excel表格当中
47 0
|
1月前
|
JavaScript 前端开发
【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用
【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用
【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用