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

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

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

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

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 + '/分类/' + i
            exists = 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 + '/' + n
    if 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 ’ - 十分感谢。


循循而进,一往无前。

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Python处理Excel筛选数据,可以使用xlrd和xlwt这两个库进行读取和写入操作。可以按照以下步骤进行: 1. 导入xlrd和xlwt库。 2. 打开要处理Excel文件。 3. 读取要处理表格。 4. 获取表格的行数和列数。 5. 获取用户输入的筛选条件。 6. 创建一个新的表格,并添加表头。 7. 遍历原表格的每一行,判断是否满足筛选条件。 8. 如果满足条件,则将该行数据添加到新表格。 9. 保存新表格。 下面是一个示例代码,可以根据用户输入的筛选条件,在Excel文件中筛选数据并保存为新的Excel文件: ```python import xlrd import xlwt # 打开要处理Excel文件 file = '0422.xlsx' data = xlrd.open_workbook(file) # 读取要处理表格 table = data.sheet_by_name("1") nrows = table.nrows # 行数 ncols = table.ncols # 列数 # 获取用户输入的筛选条件 data = input('输入你想要筛选数据,format(#2班)\n') # 创建新的表格 workbook = xlwt.Workbook(encoding='utf-8') new_sheet = workbook.add_sheet('test') # 筛选数据并写入新表格 row_index = 0 for i in range(1, nrows): if table.row_values(i)[6 == data: # 筛选第几列就改 [1 里的数字 for j in range(ncols): new_sheet.write(row_index, j, table.cell(i, j).value) row_index += 1 # 保存新表格 workbook.save('shaixuanhou.xls') ``` 这段代码会将满足筛选条件的数据写入一个新的Excel文件(名为shaixuanhou.xls),并保存在当前工作目录下。请根据你的实际需求修改文件名和筛选条件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值