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 pd
import os
from 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 ’ - 十分感谢。
循循而进,一往无前。
Python3 编写处理Excel表格数据筛选脚本用到的一些方法相关推荐
- Java中Excel表格数据的导入和导出步骤和方法
Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表.读取Excel数据表的第一步是创建Workbook(术 语:工作薄),下面的代码片段举例说 ...
- python3读取excel数据-Python3读取和写入excel表格数据的示例代码
python操作excel主要用到 xlrd 和 xlwt 这两个库,xlrd读取excel表格数据, 支持 xlsx和xls格式的excel表格 :xlwt写入excel表格数据: 一.python ...
- 如何利用python将excel表格中筛选出来的每一份数据各自另存为新的excel文件?
如何利用python将excel表格中筛选出来的每一份数据各自另存为新的excel文件? 1.问题描述 2.解决过程 2.1 问题分析: 2.2 解决思路 3.运行结果 1.问题描述 最近在处理一堆工 ...
- Python3读取和写入excel表格数据
目录 一.python读取excel表格数据 1.读取excel表格数据常用操作 2.xlrd模块的主要操作 3.读取单元格内容为日期时间的方式 4. 读取合并单元格的数据 二.python写入exc ...
- python3 写入excel表格数据_Python3读取和写入excel表格数据
目录 python操作excel主要用到 xlrd和xlwt 这两个库,xlrd读取excel表格数据, 支持 xlsx和xls格式的excel表格 :xlwt写入excel表格数据: 一.pytho ...
- python导入excel表格-Python 将Excel表格数据导入MySQL数据库
今天分享一个刚刚完成的Python脚本,一个实用的小技能,就是利用Python代码,将EXCEL表格数据导入到MySQL数据库中!话不多说,下面代码示例. Excel表格数据.jpg 1示例代码: i ...
- Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
1 任务需求 首先,我们来明确一下本文所需实现的需求. 现有一个记录北京市部分PM2.5浓度监测站点信息的Excel表格数据,格式为.xls:文件内包含站点编号.X与Y坐标.站点名称等四列数据 ...
- Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】
背景 最近在使用JavaScript编写一些浏览器RPA脚本,脚本使用过程中遇到一些问题,脚本使用的数据往往存放在excel表,但运行时只能读取json数据,导致频繁人工excel转json,效 ...
- 【Unity】安装配置Python使用protobuf转换Excel表格数据并在unit中使用
前言: 之前使用NPOI插件编写的导表工具,其实就是直接将数据进行序列化,解析时还需要进行反序列化,步骤比较繁复,最近看到Google的一个开源的项目protobuf,不仅可以用于进行excel表格数 ...
最新文章
- C++ 类的静态成员详细讲解
- 达摩院2022年十大科技趋势发布:AI for Science刚开始,大模型进入冷静期
- software on macbook pro
- mysql在计算机管理中的路径怎么修改_Rstudio中修改工作路径的三种方法
- CNN分类,ResNet V1 ,ResNet V2,ResNeXt,DenseNet
- TensorFlow2.0(七)--基础API使用
- Android开发中的SQLite事务处理,即beginTransaction()方法
- 生成SQL SERVER数据库脚本
- 如何设置vs2005的环境变量
- 【自动驾驶】PurePursuit实现轨迹跟踪
- 移位运算(无符号移位运算,有符号移位运算)
- Android 系统广播(大全)
- distrowatch(distrowatch什么意思)
- cadence 批量一次性修改title 页码标题等
- 数据,模型,算法共同决定深度学习模型效果
- java 删除重复文件
- jenkins使用python脚本发送企业微信通知
- 【备忘】Java从零到精通学习路线培训教程
- bzoj 4398 福慧双修——二进制分组
- CTC Loss (一)