大家好!
欢迎来到「Pandas案例精进」专栏
今天分享的是一个之前的案例,里面涉及的方法可能有些过时,但处理思想仍有较高的参考价值。
Pandas案例需求
整理了一下需求大概的意思,即根据汇总表的分区字段自动填入指定的分区文件中:
对于分区表的文件,例如A区.xlsx、B区.xlsx等,需要先将3行之后已经存在的数据删除后再进行写入。
B区.xlsx
在自动填入后,结果如下:
其实初始需求非常简单,我们下面看看怎么做吧。
汇总表的数据情况
import pandas as pd
data = pd.read_excel("汇总.xlsx", sheet_name='明细')
data
对于B区的数据如何写入呢?
筛选出准备写入B区的数据
df = data[data["所属区"] == "B区"]
df
df = df.iloc[:, 1:]
df.values.tolist()
结果:
[[111111, nan, '张一', '招商银行', 576.0, nan, nan, nan, '河南省'],
[111112, nan, '张二', '招商银行', 576.0, nan, nan, nan, '湖南省'],
[111113, nan, '张三', '招商银行', 1392.0, nan, nan, nan, '河南省']]
覆盖写入到对应的分区文件
workbook = load_workbook(filename="B区.xlsx")
sheet = workbook.active
先删除第4行之后的旧数据,预计1000行完全够用,具体数量根据自己的数据来大致估算。
sheet.delete_rows(idx=4, amount=1000)
然后再进行添加数据
for row in df.values.tolist():
sheet.append(row)
workbook.save(filename="B区.xlsx")
workbook.close()
查看名为B区
的Excel:
遍历分区字段的简单办法
for area, df in data.groupby('所属区'):
print(area)
display(df)
完整代码
data = pd.read_excel("汇总.xlsx", sheet_name='明细')
for area, df in data.groupby('所属区'):
print(area)
if os.path.exists(f"{area}.xlsx"):
workbook = load_workbook(filename=f"{area}.xlsx")
else:
print(f"{area}.xlsx不存在")
continue
sheet = workbook.active
df = df.iloc[:, 1:]
# 先删除第4行之后的旧数据,预计1000行完全够用
sheet.delete_rows(idx=4, amount=1000)
# 然后在进行添加数据
for row in df.values.tolist():
sheet.append(row)
print(row)
print(f"保存到{area}.xlsx文件中")
workbook.save(filename=f"{area}.xlsx")
workbook.close()
好了经过以上步骤,就成功完成任务了:
群友也表示感谢,美滋滋
本文代码和案例数据
如果大家想自己学习演练,可以通过如下步骤获取本文代码和案例数据👇
扫描下方二维码👇添加我的微信(朱小五mini)为好友,然后回复关键词“20210226”,关键词是前面的红色数字,建议长按复制!
后续
不过好景不长,大早上新需求又来了:
后续需求如何解决?
我们下篇文章见!
如果大家喜欢我们的文章,就给右下角点个赞👍吧~
本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/XY1lS4mxEf7BTf8UnFmaFA,可扫描二维码进行关注: 如有侵权,请联系删除。