首页 > 编程语言 >Python实现将Excel表格按某列拆分为多个sheet

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

时间:2023-05-27 09:22:04浏览次数:41  
标签:loc file sheet 某列 Python Excel dict key data

<众~号@生信探索>

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

import pandas as pd
import bioquest as bq # https://jihulab.com/BioQuest/bioquest

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

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的行

data = pd.read_excel(input_file)
data.dropna(subset=key,inplace=True)

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

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中

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

few = pd.concat(few_dict,ignore_index=True)
few.to_excel(output_file, sheet_name="合并的药物", index=False)

循环append sheet,最后close

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()

标签:loc,file,sheet,某列,Python,Excel,dict,key,data
From: https://www.cnblogs.com/BioQuest/p/17436266.html

相关文章

  • Python中的数据容器指的是什么?
    在Python中,数据容器是用来存储和组织数据的对象,常见的数据容器有以下几种:1.列表(List):是一种有序的数据容器,可以存储任意类型的数据,可以通过下标来访问和修改列表中的元素。2.元组(Tuple):也是一种有序的数据容器,与列表类似,但是元组中的元素不可修改,常用于存储一些固定不变的数据。3......
  • 用Python开发输入法后台(5)——数据结构
    全部汉字我从网上收集了一些资料,构建了一个<全部汉字.json>文件,文件格式如下所示:{"吖":[["aa","ya"],"szhdps"],"呵":[["aa",......
  • Python——饼图
    matplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center=(0,......
  • python 日期函数的使用
    计算一段时间内,周六出现的次数。如果是周六,则 5==dt_start.weekday()这里用到了2个主要的日期函数datetime_to_date_int,date_int_to_datetime importdatetimedefdatetime_to_date_int(dt):ifisinstance(dt,datetime.datetime):dt=dt.date()......
  • 使用这些方法让你的 Python 并发任务执行得更好
    动动发财的小手,点个赞吧!问题一直以来,Python的多线程性能因为GIL而一直没有达到预期。所以从3.4版本开始,Python引入了asyncio包,通过并发的方式并发执行IO-bound任务。经过多次迭代,asyncioAPI的效果非常好,并发任务的性能相比多线程版本有了很大的提升。但是,程序员在使......
  • 2.3Tucker分解HOSVD、HOOI算法推导和python实现
    HOSVD参考论文:AMULTILINEARSINGULARVALUEDECOMPOSITIONHOSVD虽然不能保证给Tucker分解给出最优拟合,但是可以提供一个好的初始化的解这些矩阵都是正交的。之所以求前R最大特征值,可以在下文的HOOI看到,目的是最大化目标函数UWHOSVD的最后一行证明如下:HOOI:黄色之所以可以化过去,......
  • python md5源码
    importbinasciiimportsysimportos.pathSV=[0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,0xa679438e,0x49b40......
  • python day3
    上篇案例  #我写的importrandomnum=random.randint(1,10)print(num)a=int(input("请输入数字"))ifa==num:print("bingo!")elifa>num:b=int(input("大了,还有两次机会,重新输入"))ifb>num:c=int(input(&qu......
  • Python 使用Seaborn画图,代码正常不出图
    不得不说,这个库画出来的图也太好看了。目前还没有很懂这个库,但是需要注意的是我在用完plt之后引入这个,图片一直出不来真的困扰我很久啊。终于找到了救命的办法参考链接:https://blog.csdn.net/qq_56039091/article/details/124024286......
  • 【python基础】变量
    1.初识变量编程本质就是通过一定的规则,去操纵数据,变量作为数据的载体,在程序中经常会被用到。与变量相联系的还有一个名词叫数据类型,我们可以举一个生活中的例子,来理解数据类型-变量-数据三者之间的关系红色的1号杯子中装满了水,其中红色就代表数据类型,1号杯子就代表变量,而水就代......