大家好,我是Python进阶。前言前几天有个叫[Lcc]的爱好者在Python交流群里问了一个关于从Excel文件中提取指定数据并生成新文件的问题。乍一看,确实有点难度,但还是有思路的。她的目标是提取文件中A列单元格中数据为10的所有行。看到A列的表头是时间,10代表上午10点,也就是说她需要提取每天上午10点的数据。这个数据在做研究的时候还是挺有用的,后面结合画图,可以挖掘出一些潜在的规律,这里就不深究了。一、思路这道题看似简单,就是用Excel中的筛选器。确实可以做到数据过滤和后续扩展。对于一两个不到10位的Excel文件,我们还可以游刃有余,但面对成百上千的这样的数据文件,恐怕就力不从心了。如果还是一一处理,会很不爽,所以用Python做批处理还是很不错的。下面一起来看看吧!2.解决办法其实这个问题和转载刘早起之前那篇文章的问题是一模一样的。Python办公自动化|批量提取Excel数据。改,只要把判断条件改成等于就行了,下面直接上传代码。详细的代码分析可以参考上面提到的那篇文章,这里就不赘述了。#coding:utf-8fromopenpyxlimportload_workbook,Workbook#数据所在文件夹目录path='C:/Users/pdcfi/Desktop/xiaoluo'#打开数据workbookworkbook=load_workbook(path+'/'+'Weitu1.xlsx')#Openworksheetsheet=workbook.activebuy_mount=sheet['A']row_lst=[]forcellinbuy_mount:ifisinstance(cell.value,int)andcell.value==10:print(cell.row)row_lst.append(cell.row)new_workbook=Workbook()new_sheet=new_workbook.active#创建与原始数据相同的表头(第一行)header=sheet[1]header_lst=[]forcelinheader:header_lst.append(cell.value)new_sheet.append(header_lst)#根据行号从旧表中提取符合条件的行,遍历单元格取值,以列表的形式写入新表forrowinrow_lst:data_lst=[]forcelinsheet[row]:data_lst.append(cell.value)new_sheet.append(data_lst)#最后记得保存new_workbook.save(path+'/'+'满足过滤条件的xiaoluo_new表.xlsx')然后在本地查看结果.可以看到符合条件的数据都被提取了上来。2)还记得上图粉丝说他们提取的数据只有header没有data吗?其实这里有个坑,隐藏在她的原始数据中,请看下图。A列中的数据取自B列,这是一个参考。当我们访问它时,我们无法获取它。当我们读取它时,搜索到的单元格是空的,所以我们无法提取数据。对于这样的情况,这里有两种解决方法,一种是复制粘贴A列,粘贴类型为“值”,然后重新保存excel进行阅读;另一种是以B列为索引,取时间值,然后新建一个列,然后提取,实现起来稍微困难一些。抽时间可以参考代码。df_raw['time']=pd.to_datetime(df_raw['time'],format='%Y-%m-%d').hour本文使用的是第一种方法,其实第二种方法更智能一些难度稍大,可以积极尝试实现方法。3.总结我是Python进阶。本文针对爱好者提出的如何从Excel文件中提取指定数据并生成新文件的问题,给出了两种解决方案。针对这个问题,小编在这里整理了两个思路。当然,手段肯定远不止这两种!
