python将excel拆分到不同的sheet页
一、背景
有原始excel如下
拆分列 | 其他属性1 | 其他属性2 |
---|---|---|
A | 其他1 | 属性1 |
A | 其他2 | 属性2 |
B | 其他3 | 属性3 |
B | 其他4 | 属性4 |
B | 其他5 | 属性5 |
C | 其他6 | |
D | 其他7 | 属性7 |
按照“拆分列“将excel内容拆分到不同的sheet页中,sheet页的名称为”拆分列的值“
二、基本思路
- 获取原始excel的表头(拆分的时候需要将表头拆分到每个sheet页)
- 获取筛选列的枚举(需要去重,因为每个枚举不止出现一次)
- 定义目标文件(为了支持重跑,程序运行需要判定目标文件是否存在)
- 循环步骤二得到的枚举,并查找对应内容,填写到不同的sheet页
三、程序代码
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# author:
# email:
# createtime:2022/12/29 8:36
# software: PyCharm
# modify:
"""
文件说明:
excel拆分,将一个excel按照某列拆分到不同的sheet页中
"""
import os
import pandas
# 文件路径
test_path = r'test.xlsx'
target_path = r'target.xlsx'
# 读取excel内容(keep_default_na设置空值的正常显示)
data_frame = pandas.DataFrame(pandas.read_excel(test_path, sheet_name='TEST', keep_default_na=False))
# 获取表头
head = data_frame.columns.values
# 获取筛选列
splite_col = data_frame['拆分列'].values.tolist()
splite_value_list = list(set(splite_col))
# 判断路径是否存在
if os.path.exists(target_path):
os.remove(target_path)
# 拆分并写入excel
excel_writer = pandas.ExcelWriter(target_path)
for splite_value in splite_value_list:
splite_content = data_frame[(data_frame['拆分列'] == splite_value)]
splite_data_frame = pandas.DataFrame(columns=head, data=splite_content)
splite_data_frame.to_excel(excel_writer, index=False, sheet_name=splite_value)
excel_writer.close()