300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python3 编写处理Excel表格数据筛选脚本用到的一些方法

Python3 编写处理Excel表格数据筛选脚本用到的一些方法

时间:2022-04-07 11:42:23

相关推荐

Python3 编写处理Excel表格数据筛选脚本用到的一些方法

记录下之前用python3 写的一个处理Excel表格数据筛选脚本用到的一些方法。

本文内容比较杂,可按需跳转翻看。

pandas是一个内容十分丰富的库,我也只不过用到其中处理excel的方法,对这个库感兴趣的可以直接翻阅pandas官方文档,对处理excel方法部分感兴趣的可以点击这里

目录

pandas安装图形化收集文件夹和文件名自动创建文件夹pandas读取Excel表格pandas筛选Excel表格数据pandas生成新数据表结尾

pandas安装

本文所用Python环境为3.9,操作系统为Windows 10

安装pandas库

pip install pandas

本文安装完pandas库后还需安装依赖库openpyxl

pip install openpyxl

图形化收集文件夹和文件名

脚本的初衷是批量化处理数据,收集文件信息必不可少,减少文本输入是编写脚本的一个初衷,所以选择图形化界面收集文件信息

Python3 内置提供了图形化界面库tk和文件操作库os,直接导入所用到库

import pandas as pdimport osfrom tkinter import *import tkinter.filedialog

Tk()创建图形化窗口收集文件夹路径,os.listdir()收集路径下子文件名生成列表

root = Tk() # 创建图形化窗口path = tkinter.filedialog.askdirectory() # 选择文件夹list_filename = os.listdir(path)

也可直接收集单个文件名信息

file = tkinter.filedialog.askopenfilename() # 选择一个文件,收集到文件绝对路径path, filename = os.path.split(file)[0], os.path.split(file)[1] # path为路径,filename为文件名

自动创建文件夹

需要对数据进行分类导出,自动创建文件夹进行分类

创建一个列表,使用os库进行文件夹创建,此处按地市来创建,将新创建的文件夹放置于原文件夹下

city = ['北海', '崇左', '防城港', '贵港', '桂林', '河池', '贺州', '来宾', '柳州', '南宁', '钦州', '梧州', '玉林', '百色']for i in city:path_new = path + '/分类/' + iexists = os.path.exists(path_new)if not exists: # 如果未创建目录os.makedirs(path_new)print(f'目录{path_new}已创建')

pandas读取Excel表格

将之前收集到的文件信息重新构建成绝对路径以便读取,同时使用endswith()判断文件名后缀为.xlsx,使用pandas的read_excel()进行读取

for n in list_filename:filename = path + '/' + nif filename.endswith('.xlsx'):ws = pd.read_excel(filename, sheet_name=0, keep_default_na=False)

其中sheet_name=可用表名或者数字,0代表第一个表,1代表第二个表,'sheet1’代表读取sheet1表,以此推类;keep_default_na=False表示读取到空单元格时不使用NaN代替。除此外还有其他参数,请参考pandas文档

以此方式读取表格会产生columns列标签和index行索引,如图:

pandas筛选Excel表格数据

本文筛选条件为按列筛选地市数据并分类,使用str.contains()方法进行筛选

for i in city:md = ws.loc[ws['所属地市'].str.contains(i, na=False, regex=True)]

此处na=False为遇单元格为空时不填充NaN;loc[ ]通过标签或布尔数组访问一组行和列。

contains()方法筛选较为宽松,填充内容默认为正则表达式,即regex=True,当regex=False则以字符串来进行筛选。

如下图:

所属地市:南宁 筛选出结果:

所属地市:南宁或桂林 筛选出结果:

以字符串筛选:

所属地市:除去南宁或桂林 筛选出结果:

也可换成在后面 == False,效果相同

当需要更严格筛选时,可使用str.fullmatch()

fullmatch()仅当字符串完全匹配时为真

当多重列筛选时,可以先全部收集,再使用 drop_duplicates() 进行自动去重

注意! 筛选的数据一般需要使用loc[ ] 来进行整行数据摘取

pandas生成新数据表

筛选完数据后,需要生成新数据表,本文使用 to_excel()来生成

to_excel() 指向地址若已存在同名数据表,将会对该数据表进行内容覆盖,使用时需注意

此处index=False 为不额外生成行索引,否则会在每行数据前多加一个数字索引

除此外,若没有筛选到数据,to_excel()也会生成新数据表,但仅存在列标签,若想筛选无结果不建立新表,仅需判断有无行索引

if len(wd.index.values):wd.to_excel(path + new_filename, index=False)print(path + new_filename + " OK")else:print("筛选数据为空 不创建表")

结尾

文章到这里就结束了,想了解更多pandas用法可前往pandas官方翻看pandas十分钟上手教程

如对代码如果有什么疑问可以评论或私信,觉得有用的话还可以关注收藏一手 - ’ v ’ - 十分感谢。

循循而进,一往无前。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。