python按行拆分表格_利用Python对Excel按列值筛选并拆分表格到多个文件

场景:集团中心下发本省数据时,并未按地市、业务拆分,现需要按地市、业务拆分并分发到地市。

本文利用Python的pandas包实现了以上场景。

数据示例如下:

c54bee6423804a7bbfede0635087ac9b.png

74920e41eb6d40298f5c4cd2ef61fab5.png

以上Excel需要按地市筛选拆分并另存为每个地市一个文件。

now, show u the code:

# -*- coding: utf-8 -*-

"""

Created on Fri Nov 1 09:53:30 2019

@author: lanxuxml

应用场景:

包含多个sheet的Excel 需要按列筛选出来另存为其它文件

"""

import pandas as pd

split_excel_name_head = r'F:\20191129\jidi\湖南省_JD_'

split_excel_name_tail = r'_疑似同一客户合并.xlsx'

xlsx_name = r"F:\20191129\湖南省_JD_疑似同一客户合并.xls"

#用来筛选的列名

filter_column_name = u'市'

filter_column_name_quxian = u'区县'

#获取所有sheet名

df = pd.ExcelFile(xlsx_name)

sheet_names = df.sheet_names

#删除sheet名为数据量的sheet

sheet_names.remove('数据量')

#不需要筛选的sheet名

sheet_not_filter_names = ['场景说明']

#将该列去重后保存为list

city_names = []

#从市 区县 两列 获取所有sheet中的唯一值

for sheet_name in sheet_names:

try :

tmp_df = pd.read_excel(xlsx_name, sheet_name=sheet_name)

city_names = city_names + tmp_df[filter_column_name].unique().tolist() + tmp_df[filter_column_name_quxian].unique().tolist()

except :

pass

#与实际市名求交集再去重,避免出现空表或者空sheet

city_names_unique_all = ['娄底市', '湘西土家族苗族自治州', '邵阳市', '常德市', '长沙市', '株洲市', '郴州市', '益阳市', '永州市', '怀化市', '湘潭市', '衡阳市', '岳阳市','张家界市']

city_names = list(set(city_names).intersection(set(city_names_unique_all)))

city_names = list(set(city_names))

#所有场景没有数据的市

city_no_data = list(set(city_names_unique_all).difference(set(city_names)))

print(city_no_data)

tmp_report_writer = pd.ExcelWriter(xlsx_name + u"_拆分报告_临时.xlsx")

report_writer = pd.ExcelWriter(xlsx_name + u"_拆分报告.xlsx")

for city_name in city_names:

city_excel_name = split_excel_name_head + str(city_name) + split_excel_name_tail

writer = pd.ExcelWriter(city_excel_name)

#将city_name转为list

city_name_to_list = []

city_name_to_list.append(city_name)

tmp_df = pd.DataFrame(city_no_data)

for sheet_name in sheet_names:

tmp_df = pd.read_excel(xlsx_name, sheet_name=sheet_name)

tmp_sliced = pd.DataFrame()

if sheet_name not in sheet_not_filter_names:

tmp_sheet = tmp_df[tmp_df[filter_column_name].isin(city_name_to_list)]#按市

tmp_sheet = tmp_sheet.append(tmp_df[tmp_df[filter_column_name_quxian].isin(city_name_to_list)])#增加按区县有地市的行

tmp_sheet = tmp_sheet.drop_duplicates(keep = 'first')#去重

#无法通过 市 区县两列拆分的数据

tmp_sliced = tmp_df.append(tmp_sheet).drop_duplicates(keep = False)

else :

tmp_sheet = tmp_df

tmp_sheet.to_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False)

tmp_sliced.to_excel(excel_writer=tmp_report_writer, sheet_name=sheet_name, encoding="utf-8", index=False)

writer.save()

writer.close()

tmp_report_writer.save()

tmp_report_writer.close()

for sheet_name in sheet_names:

ori_df = pd.read_excel(xlsx_name, sheet_name=sheet_name)

sli_df = pd.read_excel(xlsx_name + u"_拆分报告_临时.xlsx", sheet_name=sheet_name)

ori_df = ori_df.append(sli_df).drop_duplicates(keep = False)

ori_df.to_excel(excel_writer=report_writer, sheet_name=sheet_name, encoding="utf-8", index=False)

report_writer.save()

report_writer.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值