Python 实现 excel 数据过滤(从入门到exe)

一、场景分析

假设有如下一份 excel 数据 shop.xlsx, 写一段 python 程序,实现对于车牌的分组数据过滤。

并以车牌为文件名,把店名输出到 车牌.txt 文件中。

比如 闽A.txt 文件内容为:

小林书店福州店1

小林书店福州店2 

二、依赖安装

程序依赖 pandas 对 excel 数据进行处理,所以需要先安装一下 pandas 依赖。

pip install pandas

 三、代码实现

import pandas as pd# pandas 菜鸟教程
# https://www.runoob.com/pandas/pandas-dataframe.html# 输入文档
input_path = r"C:\Users\Administrator\Desktop\py\excel\filter\shop.xlsx"# 读取 Excel 文件,将其存储在一个DataFrame对象中
df = pd.read_excel(input_path)
# 行数,注意这个行数是数据行数,标题不算
rows = df.shape[0]
# 最终的数据结果是,{ '闽A':[], '闽B':[], '闽C':[]  }
result = {}# 根据 车牌号,获取店名
for  i  in range(0, rows):# df.loc[ idx, 'Column1'] # idx : 行标,从 0 开始,0 是数据行的第一行,即 excel 的第二行carNo = df.loc[i, '车牌']print( carNo )shopName = df.loc[i, '店名']print( shopName )# 以 carNo 为 key 从字典中获取值列表,没有返回 None,避免 KeyErrorvalue_list = result.get(carNo, None)if value_list:value_list.append(shopName)else:value_list = []value_list.append(shopName)result[ carNo ] = value_listprint( result )
# 根据 carNo, 生成 txt, 内容是 店名
# 遍历 key 列表
for key in result.keys():value_list = result.get(key)output_path = key+'.txt'# 以 write 的方式打开输出文件with open( output_path, 'w', encoding='utf-8') as file:num = len( value_list ) end = num - 1for i, item in enumerate(value_list):# 最后一行数据不需要换行if i == end:file.write(item)                         else:file.write(item + '\n')

四、运行

py shop_filter.py

 

不过上面程序的局限,就在于只能通过某一列,过滤出另一列数据,如果我们希望过滤出一整行数据,要怎么办呢?》》》》》更进一步

五、过滤出整行数据,保存到不同 excel 中

from openpyxl import Workbook
import pandas as pd# pandas 菜鸟教程
# https://www.runoob.com/pandas/pandas-dataframe.html# 输入文档
input_path = r"C:\Users\Administrator\Desktop\py\excel\filter\shop.xlsx"# 读取 Excel 文件,将其存储在一个DataFrame对象中
df = pd.read_excel(input_path)
# 行数,注意这个行数是数据行数,标题不算
rows = df.shape[0]
# 列数
columns = df.shape[1]
# 最终的数据结果是,{ '闽A':[ [第一行数据], [第二行数据], [第三行数据] ], '闽B':[], '闽C':[]  }
result = {}# 根据 车牌号,获取店名
for  i  in range(0, rows):# df.loc[ idx, 'Column1'] # idx : 行标,从 0 开始,0 是数据行的第一行,即 excel 的第二行carNo = df.loc[i, '车牌']row_data = []for j in range(0, columns):# df.iloc[row_index, column_index] row_index 行索引;column_index 列索引row_data.append( df.iloc[ i, j ] )# 以 carNo 为 key 从字典中获取值列表,没有返回 None,避免 KeyErrorvalue_list = result.get(carNo, None)if value_list:value_list.append( row_data )else:value_list = []value_list.append( row_data )result[ carNo ] = value_listtitle_list = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1', 'J1', 'K1', 'L1', 'M1', 'N1', 'O1', 'P1', 'Q1', 'R1', 'S1', 'T1', 'U1', 'V1', 'W1', 'X1', 'Y1', 'Z1']
# 根据 carNo, 生成 excel, 内容是 整行数据
# 遍历 key 列表
for key in result.keys():# 创建一个新的工作簿wb = Workbook()# 选择默认的活动工作表 ws = wb.activefor i, item in enumerate( df.columns ):# 向工作表中写入表头title = title_list[i]ws[ title ] = itemvalue_list = result.get(key)for row_data in value_list:ws.append( row_data )output_path = key+'.xlsx'wb.save( output_path )

 

不过上面程序的局限,就在于过滤出的 excel 有点多,如果我希望只放在一个 excel 里面,区分不同的 sheet 页就好,要怎么办呢?》》》》》更进一步

六、过滤出整行数据,保存到同一个 excel 中,区分不同 sheet 页

from openpyxl import Workbook
import pandas as pd# pandas 菜鸟教程
# https://www.runoob.com/pandas/pandas-dataframe.html# 输入文档
input_path = r"C:\Users\Administrator\Desktop\py\excel\filter\shop.xlsx"# 读取 Excel 文件,将其存储在一个DataFrame对象中
df = pd.read_excel(input_path)
# 行数,注意这个行数是数据行数,标题不算
rows = df.shape[0]
# 列数
columns = df.shape[1]
# 最终的数据结果是,{ '闽A':[ [第一行数据], [第二行数据], [第三行数据] ], '闽B':[], '闽C':[]  }
result = {}# 根据 车牌号,获取店名
for  i  in range(0, rows):# df.loc[ idx, 'Column1'] # idx : 行标,从 0 开始,0 是数据行的第一行,即 excel 的第二行carNo = df.loc[i, '车牌']row_data = []for j in range(0, columns):# df.iloc[row_index, column_index] row_index 行索引;column_index 列索引row_data.append( df.iloc[ i, j ] )# 以 carNo 为 key 从字典中获取值列表,没有返回 None,避免 KeyErrorvalue_list = result.get(carNo, None)if value_list:value_list.append( row_data )else:value_list = []value_list.append( row_data )result[ carNo ] = value_listtitle_list = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1', 'J1', 'K1', 'L1', 'M1', 'N1', 'O1', 'P1', 'Q1', 'R1', 'S1', 'T1', 'U1', 'V1', 'W1', 'X1', 'Y1', 'Z1']
# 根据 carNo, 生成 excel, 内容是 整行数据
# 遍历 key 列表
# 创建一个新的工作簿
wb = Workbook()
flag = True
for key in result.keys():if flag:# 选择默认的活动工作表 ws = wb.activews.title = keyflag = Falseelse:     ws = wb.create_sheet(title=key)for i, item in enumerate( df.columns ):# 向工作表中写入表头title = title_list[i]ws[ title ] = itemvalue_list = result.get(key)for row_data in value_list:ws.append( row_data )wb.save( 'data.xlsx' )

 

不过分析上面程序,会发现整个程序的输入,就

input_path:要处理的 excel 文件路径;

df.loc[i, '车牌'] :车牌 这种我想过滤的列名。

能否写一个程序,输入这两个参数,然后运行输出结果,使之成为更通用的 程序呢?

》》》》》更进一步

七、输入过滤列名与文件路径

from openpyxl import Workbook
import pandas as pd# pandas 菜鸟教程
# https://www.runoob.com/pandas/pandas-dataframe.html# 提示用户输入 excel 位置 类似 C:\Users\Administrator\Desktop\py\shop.xlsx
input_path = input("请输入 excel 完整位置,包括文件名:")
# 提示用户输入需要过滤的列名
column_name = input("请输入需要过滤的列名:")
print('处理中')# 读取 Excel 文件,将其存储在一个DataFrame对象中
df = pd.read_excel(input_path)
# 行数,注意这个行数是数据行数,标题不算
rows = df.shape[0]
# 列数
columns = df.shape[1]
# 最终的数据结果是,{ '闽A':[ [第一行数据], [第二行数据], [第三行数据] ], '闽B':[], '闽C':[]  }
result = {}# 根据 车牌号,获取店名
for  i  in range(0, rows):# df.loc[ idx, 'Column1'] # idx : 行标,从 0 开始,0 是数据行的第一行,即 excel 的第二行carNo = df.loc[i, column_name]row_data = []for j in range(0, columns):# df.iloc[row_index, column_index] row_index 行索引;column_index 列索引row_data.append( df.iloc[ i, j ] )# 以 carNo 为 key 从字典中获取值列表,没有返回 None,避免 KeyErrorvalue_list = result.get(carNo, None)if value_list:value_list.append( row_data )else:value_list = []value_list.append( row_data )result[ carNo ] = value_listtitle_list = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1', 'J1', 'K1', 'L1', 'M1', 'N1', 'O1', 'P1', 'Q1', 'R1', 'S1', 'T1', 'U1', 'V1', 'W1', 'X1', 'Y1', 'Z1']
# 根据 carNo, 生成 excel, 内容是 整行数据
# 遍历 key 列表
# 创建一个新的工作簿
wb = Workbook()
flag = True
for key in result.keys():if flag:# 选择默认的活动工作表 ws = wb.activews.title = keyflag = Falseelse:     ws = wb.create_sheet(title=key)for i, item in enumerate( df.columns ):# 向工作表中写入表头title = title_list[i]ws[ title ] = itemvalue_list = result.get(key)for row_data in value_list:ws.append( row_data )wb.save( 'data.xlsx' )

如果能够打包成 exe 文件,使之成为更通用的程序就更好了。

》》》》》更进一步

八、打包成 exe 程序

1、安装 pyinstaller

pip install pyinstaller

 2、验证安装是否成功

   pyinstaller --version

 3、在脚本所在位置执行

pyinstaller shop_filter.py

这将在当前目录下生成一个 dist 文件夹,其中包含打包后的可执行文件。

 

4、双击执行 exe 文件

输入参数 回车

5、查看生成结果

在 exe 所在路径下,生成了一个 data.xlsx 文件

九、扩展阅读

更多关于 python 操作 excel 的内容可以看我的 博文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乘云而上,OceanBase再越山峰

一座山峰都是一个挑战,每一次攀登都是一次超越。 商业数据库时代,面对国外数据库巨头这座大山,实现市场突破一直都是中国数据库产业多年夙愿,而OceanBase在金融核心系统等领域的攻坚克难,为产业突破交出一副令人信服的…

消防应急救援系留照明无人机技术详解

消防应急救援系留照明无人机技术是一种专门用于消防应急救援场景,通过系留技术实现长时间悬停并提供高效照明服务的高科技解决方案。以下是对该技术的详细解析: 一、系统组成 消防应急救援系留照明无人机系统主要由无人机平台、LED照明灯组、系留供电系…

PowerBI 根据条件选择获得不同的表格 因为IF和SWITCH只能返回标量而不能返回表格 Power BI

PowerBI 根据条件选择返回不同的表格 因为IF和SWITCH只能返回标量而不能返回表格 Power BI 自定义日期筛选套件 根据条件得到不同的表格 背景 在设置自定义对比日期时,需要根据选择的内容返回不同的表格作为CALCULATE的表格参数进行计算。 图1:Power …

2024年10款好用的图纸加密软件推荐|企业CAD图纸加密指南!

在当今数字化时代,企业的 CAD 图纸等重要设计文件面临着日益严峻的安全风险。为了保护企业的核心知识产权和商业机密,选择一款可靠的图纸加密软件至关重要。下面为大家推荐 2024 年 10 款好用的图纸加密软件,为企业提供 CAD 图纸加密指南。 一…

设计资讯 | 塑造数字交互未来的 Sol Reader

虚拟现实 (VR) 在过去几年中不断创新和发展。它真正突破了沉浸式体验的极限。VR 技术目前正在提高视觉保真度,甚至融入其他感官,从而彻底改变我们与数字世界的互动方式。 来看看世界上第一款 VR 电子书阅读器——Sol Reader。它为狂热的读者提供了一种独…

Linux下MySQL8.x的编译安装与使用

Linux下MySQL的安装与配置 1. 安装环境初始化 1.1 查看是否安装过MySQL 如果使用rpm安装, 检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写 # 或者 yum list installed | grep mysql如果存在mysql-libs的旧版本包,显示如下 #存在 [rootlocalhost ~]…

一文解决单调栈的应用

单调栈的定义: 单调栈是栈的一中特殊形式,在栈中的元素必须满足单调性(一定是单调上升或单调下降等等的规律)。 单调栈的性质: 单调栈解决的问题 单调栈解决的常见问题:给定一个序列,求每个位置…

.NET 8 中的 Mini WebApi

介绍 .NET 8 中的极简 API 隆重登场,重新定义了我们构建 Web 服务的方式。如果您想知道极简 API 的工作原理以及它们如何简化您的开发流程,让我们通过一些引人入胜的示例来深入了解一下。 .NET 极简主义的诞生 想想我们曾经不得不为一个简单的 Web 服务…

Linux——常见指令及其权限理解(正在更新中)

1.指令 1.1 快速了解指令 pwd 首次登录,默认所处的路径 whoami 当前所用的用户的名称 ls 显示当前路径下,文件名称 mkdir 在当前目录下,创建一个文件夹/目录 cd 进入一个目录 touch 新建一个文…

esp32 GPIO 分别用5种中断类型控制LED

下面程序分别用ANYEDGE POSEDGE NEGEDGE HIGH_LEVEL LOW_LEVEL 中断类型控制GPIO 0 脚的电平。此程序的重点是用延时消除按键产生的无用中断信号 硬件 1. led 接0脚和地 2. 按钮接gpio 1脚 和地或3.3v 脚 图片 程序 #include "driver/gpio.h" #incl…

ansible开局配置-openEuler

ansible干啥用的就不多介绍了,这篇文章主要在说ansible的安装、开局配置、免密登录。 ansible安装 查看系统版本 cat /etc/openEuler-latest输出内容如下: openeulerversionopenEuler-24.03-LTS compiletime2024-05-27-21-31-28 gccversion12.3.1-30.…

金蝶云星空采购退料单集成易仓出库单实现高效数据对接

金蝶云星空采购退料单集成易仓出库单实现高效数据对接 Done-金蝶-采购退料单——>易仓-出库单:高效数据集成方案解析 在企业的日常运营中,数据的准确传递和实时处理至关重要。本文将聚焦于一个具体的系统对接集成案例:如何将金蝶云星空中…

基于Ubuntu24.04,下载并编译Android12系统源码 (二)

1. 前言 上篇文章,我们基于Ubuntu24.04,已经成功下载下来了Android12的源码,这篇文章我们会接着上文,基于Ubuntu24.04来编译Android源码。 2. 编译源码 2.1 了解源码编译的名词 Makefile : Android平台的一个编译系…

CMake 生成器表达式介绍

【写在前面】 生成器表达式在构建系统生成期间进行评估&#xff0c;以生成特定于每个构建配置的信息。它们的形式为 $<...>。例如&#xff1a; target_include_directories(tgt PRIVATE /opt/include/$<CXX_COMPILER_ID>) 这将扩展为 “/opt/include/GNU”、“/opt…

CV项目整理

1. 爬取+展示的实时项目 1.1 核心技术 myqls + maxwell + redis+django 实现读写分离,实时项目,主从复制,读写分离,顺写日志。 maxwell将自己伪装成为slave,就可以从Mysql的集群中获取顺写日志Binlog maxwell取得的数据格式json 1.2 流程 1.3优化查询 下面的查询,笛卡尔…

如何通过sip信令以及抓包文件分析媒体发到哪个地方

前言 问题描述&#xff1a;A的媒体没转发到B&#xff0c;B只能听到回铃音&#xff0c;没有A的说话声音&#xff0c;并且fs这边按正常的信令发送了. 分析流程 分析早期媒体发送到哪一个IP 10.19.0.1发送了一个请求给10.19.0.157这个IP&#xff0c;然而这里的SDP媒体地址&am…

Flink(一)

目录 架构处理有界与无界数据部署应用到任意地方运行任意规模应用利用内存性能 流应用流处理应用的基本组件流状态时间 应用场景事件驱动应用事件驱动应用的优势Flink如何支持事件驱动应用&#xff1f; 典型的事件驱动示例 数据分析应用流式分析应用的优势&#xff1f;Flink 如…

RabbitMQ 安装(Windows版本)和使用

安装 安装包获取 可以自己找资源&#xff0c;我这里也有百度云的资源&#xff0c;如果没失效的话可以直接用。 通过百度网盘分享的文件&#xff1a;RabbitMQ 链接&#xff1a;https://pan.baidu.com/s/1rzcdeTIYQ4BqzHLDSwCgyw?pwdfj79 提取码&#xff1a;fj79 安装教程…

Pr 视频效果:闪光灯

视频效果/风格化/闪光灯 Stylize/Strobe Light 闪光灯 Strobe Light效果可用于在视频中创建闪烁或频闪的效果&#xff0c;类似于舞台上的频闪灯或摄影中的闪光灯。 ◆ ◆ ◆ 效果选项说明 通过调整各种参数&#xff0c;可以自定义闪光的颜色、频率、持续时间和混合模式&#…

深入理解ThreadLocal底层原理

ThreadLocal是线程私有的&#xff0c;各个线程之间是隔离的。可以想象一下每次线程创建的时候在堆上预先分配一个内存空间用于存储ThreadLocal的数据。 &#xff08;1&#xff09;当线程被创建时&#xff0c;线程都会有一个成员变量ThreadLocalMap。 //每个线程定义一个成员变…