筛选同一表格下的多个sheet里的内容并保存在对应的sheet中

筛选同一表格下的多个sheet里的内容并保存在对应的sheet中

1 目标需求

报表中含有多个sheet,而且几乎很多sheet表中都有相同要筛选的同种数据,因此就有需要将同一文件下多sheet表中内容进行筛选然后重新保存在文件中,数据样例如下,目标是提取每个sheet下Sample Type字段下的Unknown Sample对应的行数据,然后保存在该sheet下
在这里插入图片描述
目标结果:
在这里插入图片描述

2 处理步骤

① 读取Excel表格内容

② 提取Excel表格中所有的sheet名称,及其中的内容

③ 数据清洗

④ 数据分别保存在同一表格文件下对应的sheet中

3 步骤详解

① ② 读取Excel表格中的内容和提取Excel表格中所有的sheet名称,及其中的内容,这里选择pandas进行处理

sheet_name = None,要想获得所有的sheet_name,这里可以让其等于None,这样就可以得到对应的sheet名称和对应的内容

import pandas as pd
import os
os.chdir(r'C:\Users\86177\Desktop')

data  = pd.read_excel('AA_test.xlsx',header=None,sheet_name = None)
data

→ 输出的结果为:(根据报表中的内容来看,前四行和最后的几行的数据都不是要筛选的数据,这里先把取消默认的header)
在这里插入图片描述
根据输出的结果可以看出data是属于OrderedDict,那么就可以获取其中的keys和values

data.keys() #获取字典中的键,也就是sheet表的名称
data.values() #获取键对应的值,也就是sheet表中的内容

→ 输出的结果为:
在这里插入图片描述
尝试进行数据的索引,注意这里和普通的列表不是一样的,不能直接索引,需要先进行数据类型的转换,才可以进行索引,如下

扫描二维码关注公众号,回复: 11757754 查看本文章
list(data.keys())[0]  #提取第一个sheet的名称

print(type(list(data.values())[0]))  #查看一下转换后的数据类型
list(data.values())[0]  #获取第一个sheet表中的内容

→ 输出的结果为:
在这里插入图片描述
③ 数据清洗,需要剔除掉前四行和最后面几行的数据,并将第四行作为表格的列标题,代码如下

data_0 = list(data.values())[0]  # 以第一个sheet进行试错
data_0 = data_0.dropna(thresh = 6)  #如果该行的有效元素没有超过6个就会被剔除
data_0.columns = data_0.iloc[0]  #因为前几行最多的行元素有效值为6,所以就全部被剔除,自然第5行就变成第1行了,这里就直接把第一行的内容变成列标题
data_0 = data_0[data_0['Sample Type'] == 'Unknown Sample']  #筛选目标数据
data_0  #数据展示

→ 输出的结果为:(可以发现前面几行和最后几行的数据全部被剔除)
在这里插入图片描述
④ 数据分别保存在同一表格文件下对应的sheet中,这里直接将对应的数据变量写入到对应的sheet表中保存即可

writer = pd.ExcelWriter(f'{file_name}') 
data_i.to_excel(writer,sheet_name = list(data.keys())[i], index = False)  #这里的data_i就是分别提取每个sheet内容对应的数据变量
writer.save() 
writer.close()

3. 全部代码

为了方便调用,这里直接封装成函数,给一个命名文件,和要筛选的字段名及内容的接口,代码如下

import pandas as pd
import os
os.chdir(r'C:\Users\86177\Desktop') #这里填自己要处理文件的位置

data  = pd.read_excel('AA_test.xlsx',header=None,sheet_name = None)

def output_data(file_name,column,comment):
    writer = pd.ExcelWriter(f'{file_name}') 
    for i in range(len(data)):
        data_i = list(data.values())[i]
        data_i = data_i.dropna(thresh = 6)
        data_i.columns = data_i.iloc[0]
        data_i = data_i[data_i[column] == comment]
        data_i.to_excel(writer,sheet_name = list(data.keys())[i], index = False) 
    writer.save() 
    writer.close()

output_data('filter_data.xlsx','Sample Type','Unknown Sample')

→ 输出的结果为:(比如这里选择倒数第二sheet表中的内容查看)
在这里插入图片描述
最后的一个Component表中是没有符合要求的数据的,因此是属于空表单,但是还是要保存在sheet的,核实结果如下,只留下了列标题名称,完成任务
在这里插入图片描述
至此,筛选同一表格下的多个sheet里的内容并保存在对应的sheet中全部内容梳理完毕,难点在于如何获取全部的sheet名称及内容,以及存储到同一个文件中,数据清洗较为简单,完毕。

猜你喜欢

转载自blog.csdn.net/lys_828/article/details/107174274