赞
踩
这是一个比较常见的需求
当前有大量的excel表格数据,需要按指定条件筛选行,并全部整理到新excel表格
注:这里是有大量文件,手动筛选复制有些繁琐,所以可以使用python
例,下面以3个文件为例(只是一个例子)…
需要筛选出
的数据行
方法一
代码1
# 打开已经存在的Excel用load_workbook # 创建新的Excel用Workbook from openpyxl import load_workbook, Workbook import glob def isinstance1(x): if isinstance(x, float) or isinstance(x, int) : return True else: return False path = r'C:\Users\ABC\Desktop\数据' new_workbook = Workbook() new_sheet = new_workbook.active # 用flag变量明确新表是否已经添加了表头,只要添加过一次就无须重复再添加 flag = 0 # 如果需要遍历特定类型的文件可以限定后缀,以xlsx后缀的Excel文件为例 for file in glob.glob(path + '/*.xlsx'): workbook = load_workbook(file) # sheet = workbook.active # 如果只有一张工作表也可以用 sheet = workbook['Sheet1'] # print(sheet) # 身高列 height = sheet['A'] # 体重列 weight = sheet['B'] # 肺活量列 vital_capacity = sheet['C'] # 接收符合条件的行号 row_lst = [] for h,w,v in zip(height,weight,vital_capacity): # print(isinstance(v.value, int)) if isinstance1(h.value) and isinstance1(w.value) and isinstance1(v.value) and h.value>120 and w.value<25 and 1000<v.value<1500: print(h.row) row_lst.append(h.row) # 添加表头 if not flag: header = sheet[1] header_lst = [] for cell in header: header_lst.append(cell.value) new_sheet.append(header_lst) flag = 1 # 在新表格写值 for row in row_lst: data_lst = [] for cell in sheet[row]: data_lst.append(cell.value) new_sheet.append(data_lst) new_workbook.save(path + '/' + '筛选数据.xlsx')
结果
方法二
代码
import pandas as pd import os # 打开文件 path = r"C:\Users\ABC\Desktop\数据" dirs = os.listdir(path) w_excel = pd.ExcelWriter(path+'/'+'筛选数据.xlsx') i=1 row = 0 li = [] for file in dirs: data = pd.read_excel(path+'/'+file) df = data[(data['身高']>120) & (data['体重']<25) & (data['肺活量']<1500) & (data['肺活量']>1000)] li.append(len(df)) if i==1: df.to_excel(w_excel,index=False) i=i+1 else: df.to_excel(w_excel,startrow=sum(li[:i-1])+1,index=False,header=False) i=i+1 w_excel.save()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。