前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现将Excel表格按某列拆分为多个sheet

Python实现将Excel表格按某列拆分为多个sheet

原创
作者头像
生信探索
发布2023-05-24 16:41:38
5850
发布2023-05-24 16:41:38
举报
文章被收录于专栏:生信探索生信探索

实际数据分析中遇到需求,把某个Excel表格按照某一列分为多个sheet,并且要求如果某个key对应的行数较少应该合并到一个sheet中。

代码语言:Python
复制
import pandas as pd
import bioquest as bq # https://jihulab.com/BioQuest/bioquest

从网上找随便了个数据做演示用

代码语言:Python
复制
input_file=r"https://gitee.com/zhjx19/chaoyanghospital/raw/master/%E6%9C%9D%E9%98%B3%E5%8C%BB%E9%99%A22018%E5%B9%B4%E9%94%80%E5%94%AE%E6%95%B0%E6%8D%AE.xlsx"
output_file=r"朝阳医院.xlsx"
key='商品名称'

读如数据,删除商品名称为na的行

代码语言:Python
复制
data = pd.read_excel(input_file)
data.dropna(subset=key,inplace=True)

替换/,删除特殊字符(因为不能作为sheetname)

代码语言:Python
复制
data.loc[:,key] = bq.st.replaces(string=data.loc[:,key],pattern=r"/",repl="每")
data.loc[:,key] = bq.st.replaces(string=data.loc[:,key],pattern=r"[\\*?:/\[\]]",repl="")

如果某个key对应的行数少于50则合并在合并的药物这个sheet中,其他的key单独存在对应的sheet中

代码语言:Python
复制
keys=data.loc[:,key].unique().tolist()
few_dict = {}
single_dict = {}
for i in keys:
    data_sub = data.groupby(key).get_group(i)
    if data_sub.shape[0]<50:
        few_dict[i] = data_sub
    else:
        single_dict[i] = data_sub

第一次写出合并的药物sheet

代码语言:Python
复制
few = pd.concat(few_dict,ignore_index=True)
few.to_excel(output_file, sheet_name="合并的药物", index=False)

循环append sheet,最后close

代码语言:Python
复制
writer = pd.ExcelWriter(output_file, engine='openpyxl',mode="a")
for k,v in single_dict.items():
    v.to_excel(writer, sheet_name=f"{k}", index=False)
writer.close()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档