get 注册会计师
Pandas案例精进 | 自动分割汇总表写入到子表
这是一个用pandas解决工作问题的实例,在财务工作中,我们也经常会遇到要将excel汇总表按某种需求分拆为若干个子表的情况,get到这个技能后,完全可以运用到财会工作中去,下面就来详细看看吧。
1.
Pandas案例需求
这是一位群友在学习交流群里提出的需求,如下图。
整理了一下需求,其大概的意思是将汇总表的分区字段自动填入到指定的分区文件中。
对于分区表的文件,如A区.xlsx、B区.xlsx等,需要先将第3行下面已经存在的数据删除后再进行写入。
B区.xlsx在自动填入后,结果如下。
其实初始需求非常简单,我们下面看看怎么做吧。
2.
汇总表的数据情况
1import pandas as pd
2data = pd.read_excel("汇总.xlsx", sheet_name='明细')
3data
对于B区的数据如何写入呢?
3.
筛选出准备写入B区的数据
1df = data[data["所属区"] == "B区"]
2df
1df = df.iloc[:, 1:]
2df.values.tolist()
结果如下。
1[[111111, nan, '张一', '招商银行', 576.0, nan, nan, nan, '河南省'],
2 [111112, nan, '张二', '招商银行', 576.0, nan, nan, nan, '湖南省'],
3 [111113, nan, '张三', '招商银行', 1392.0, nan, nan, nan, '河南省']]
4.
覆盖写入到对应的分区文件
1workbook = load_workbook(filename="B区.xlsx")
2sheet = workbook.active
先删除第4行之后的旧数据,预计1000行完全够用,具体数量根据自己的数据来大致估算。
1sheet.delete_rows(idx=4, amount=1000)
然后再进行添加数据。
1for row in df.values.tolist():
2 sheet.append(row)
3workbook.save(filename="B区.xlsx")
4workbook.close()
查看名为B区的Excel:
5.
遍历分区字段的简单办法
1for area, df in data.groupby('所属区'):
2 print(area)
3 display(df)
完整代码如下。
1data = pd.read_excel("汇总.xlsx", sheet_name='明细')
2
3for area, df in data.groupby('所属区'):
4 print(area)
5 if os.path.exists(f"{area}.xlsx"):
6 workbook = load_workbook(filename=f"{area}.xlsx")
7 else:
8 print(f"{area}.xlsx不存在")
9 continue
10 sheet = workbook.active
11 df = df.iloc[:, 1:]
12 # 先删除第4行之后的旧数据,预计1000行完全够用
13 sheet.delete_rows(idx=4, amount=1000)
14 # 然后在进行添加数据
15 for row in df.values.tolist():
16 sheet.append(row)
17 print(row)
18 print(f"保存到{area}.xlsx文件中")
19 workbook.save(filename=f"{area}.xlsx")
20 workbook.close()
好了,经过以上步骤,就基本实现目标了。#python#
群友也表示感谢,心里美滋滋。
6.
本文代码和案例数据
如果大家想自己学习演练,请私我索取本文代码和案例数据





