当前位置: 首页 > news >正文

PyQt5 + Pandas 打造常见的表格(Excel/CSV)读取与处理工具

目录

    • 使用 PyQt5 + Pandas 打造全能的表格(Excel/CSV)读取与处理工具
    • 🎯 核心功能一览
    • 🛠️ 技术栈与依赖
      • 安装依赖
    • 💻 核心代码解析
      • 1. 拖拽文件与目录加载功能
      • 2. Pandas 与 QTableView 联动 (数据预览)
      • 3. 数据处理:拆分、去重与透视
      • 4. 字符串的精细批量修改
    • 🚀 总结

专栏导读
  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
  • 🏳️‍🌈 个人博客主页:请点击——> 个人的博客主页 求收藏
  • 🏳️‍🌈 Github主页:请点击——> Github主页 求Star⭐
  • 🏳️‍🌈 知乎主页:请点击——> 知乎主页 求关注
  • 🏳️‍🌈 CSDN博客主页:请点击——> CSDN的博客主页 求关注
  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅
  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅
  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏 求订阅
  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • ❤️ 欢迎各位佬关注! ❤️

使用 PyQt5 + Pandas 打造全能的表格(Excel/CSV)读取与处理工具

在日常办公和数据分析中,我们经常需要处理各种 Excel 和 CSV 文件。无论是进行简单的数据累加、去重,还是复杂的数据透视、批量拆分,传统的操作往往需要使用 Excel 的复杂函数,或者编写重复的 Python 脚本。

为了提高工作效率,今天我们将手把手教大家使用PyQt5Pandas开发一款图形化的表格读取与处理工具。这款工具不仅支持直接拖拽文件加载,还能实时预览,并内置了多种常用的数据处理功能,非常适合零基础办公人员和数据分析师使用!

  • 完整代码:
  • 点我直达

🎯 核心功能一览

我们这款工具内置了以下实用功能:

  1. 智能文件加载:支持点击按钮选择,或直接拖拽单个/多个文件、甚至整个目录到软件中,自动识别并合并 Excel (.xls,.xlsx) 和.csv文件。
  2. 实时数据预览:加载文件后,主界面会实时显示数据的前 20 行,方便确认数据是否正确。
  3. 自定义表头:遇到表头不在第一行的数据怎么办?用户可以自定义表头所在的行数,工具会自动重新解析数据。
  4. 丰富的列操作
    • 快速对指定列进行累加计数
    • 对指定列进行数据去重
    • 按照自定义分隔符将一列拆分为多列
  5. 一键数据透视:图形化选择透视的索引(Index)、列(Columns)和值(Values),自动执行求和透视并支持一键导出结果。
  6. 大文件按行拆分:遇到几十万行的大文件处理卡顿?设置“每文件行数”,一键将大文件拆分为多个小文件保存。
  7. 强大的批量修改列功能
    • 全部修改为固定值
    • 在数据头部/尾部添加特定字符
    • 在第 X 个字符后插入特定字符
  8. 扩展功能:一键处理缺失值(如填充0、填充空字符串或直接删除缺失行),以及一键导出当前处理完毕的所有数据。

🛠️ 技术栈与依赖

本项目基于 Python 开发,主要用到了以下三个强大的库:

  • PyQt5:负责构建整个图形化用户界面 (GUI),提供了丰富的控件和交互能力。
  • Pandas:负责底层的数据读取、处理和分析,是数据处理的“核武器”。
  • openpyxl:Pandas 读写新版 Excel (.xlsx) 文件的必备引擎。

安装依赖

可以通过以下命令一键安装所有所需库:

pipinstallPyQt5 pandas openpyxl

💻 核心代码解析

下面我们来拆解一下这个工具的几个核心实现点。

1. 拖拽文件与目录加载功能

为了让用户体验更好,我们继承QLabel自定义了一个DragDropWidget,用于接收拖拽事件:

classDragDropWidget(QLabel):def__init__(self,parent=None):super().__init__(parent)self.setText("拖拽单个/多个文件或目录到此处\n(支持 Excel/CSV)")self.setAcceptDrops(True)self.main_window=parentdefdragEnterEvent(self,event:QDragEnterEvent):# 允许接收包含路径的文件拖拽ifevent.mimeData().hasUrls():event.acceptProposedAction()defdropEvent(self,event:QDropEvent):urls=event.mimeData().urls()paths=[url.toLocalFile()forurlinurls]# 将获取到的路径交给主窗口处理self.main_window.handle_dropped_files(paths)

2. Pandas 与 QTableView 联动 (数据预览)

要在 PyQt 的QTableView中展示 Pandas 数据框,我们需要自定义一个QAbstractTableModel,重写其行数、列数和数据返回方法:

classPandasModel(QAbstractTableModel):def__init__(self,data):super().__init__()self._data=datadefrowCount(self,parent=None):returnself._data.shape[0]defcolumnCount(self,parent=None):returnself._data.shape[1]defdata(self,index,role=Qt.DisplayRole):ifindex.isValid():ifrole==Qt.DisplayRole:val=self._data.iloc[index.row(),index.column()]returnstr(val)ifnotpd.isna(val)else""returnNonedefheaderData(self,col,orientation,role):iforientation==Qt.Horizontalandrole==Qt.DisplayRole:returnstr(self._data.columns[col])returnNone

在工具中,我们通过self.df.head(20)获取前 20 行数据并传入该 Model,实现了轻量级的数据预览。

3. 数据处理:拆分、去重与透视

基于 Pandas 的强大功能,我们可以仅用几行代码实现复杂的逻辑:

  • 去重self.df = self.df.drop_duplicates(subset=[col])
  • 拆分列new_cols = self.df[col].astype(str).str.split(sep, expand=True)
  • 数据透视
pivot_df=pd.pivot_table(self.df,values=val,index=idx,columns=col,aggfunc='sum',fill_value=0)

4. 字符串的精细批量修改

对于“在第 X 个字符后插入内容”这种需求,我们可以利用 Pandas 的apply方法搭配自定义函数实现:

definsert_str(s):s_str=str(s)iflen(s_str)>=pos:returns_str[:pos]+val+s_str[pos:]returns_str+val self.df[col]=self.df[col].apply(insert_str)

🚀 总结

通过将 PyQt5 和 Pandas 结合,我们打造出了一个功能完备、界面友好的本地数据处理利器。这个工具不仅能极大提升我们处理零碎 Excel 文件的效率,更提供了一个很好的学习范例——你可以根据自己的实际业务需求,在main.py的选项卡中继续添加更多自定义的数据清洗和分析功能!

快把这份代码运行起来,让你的数据处理工作从此告别加班吧!

结尾
  • 希望对初学者有帮助;致力于办公自动化的小小程序员一枚
  • 希望能得到大家的【❤️一个免费关注❤️】感谢!
  • 求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

http://www.jsqmd.com/news/491060/

相关文章:

  • 终极Screenshot-to-code推广指南:10个实战策略提升插件下载量
  • 如何优化Checkstyle性能:ThreadModeSettings的并发控制完全指南
  • 后悔没早知道!银泰卡回收不用排队,可可收全程线上操作,新手也能会 - 可可收
  • 如何高效协作gs-quant量化策略:Git与Pull Request完整指南
  • 终极解决方案:micro插件本地化工具——自动翻译帮助文档,打破语言壁垒
  • 如何让Agent Skills学会自我进化?
  • 如何实现co/cog与DVC集成:机器学习项目数据版本控制完整指南
  • 永辉购物卡回收攻略,一键操作 - 团团收购物卡回收
  • 终极指南:Screenshot-to-code模型决策可解释性与监管合规实践
  • 终极指南:如何快速掌握nebullvm实现LLM分析全流程
  • 如何用MockingBird打造教育领域互动式语音学习体验:完整指南
  • 探索AndroidPdfViewer的未来:新特性规划与社区贡献全指南
  • Comsol 模拟锌离子沉积电场强度与电势分布:一场微观世界的电学之旅
  • 镜像无缝上云:Skopeo + Azure Container Instances 极速部署实战
  • 如何确保Goose迁移脚本的代码覆盖率:全面测试指南
  • 7步打造JUnit4测试质量门禁:自定义插件开发完全指南
  • COVID-Net高级应用:肺炎检测与严重程度评估实战指南
  • 终极指南:DeepEP中非一致性缓存的安全使用技巧与性能优化策略
  • 如何高效解决 Kanboard 任务依赖冲突:关系管理终极指南
  • 加速Zsh语法高亮开发:zsh-syntax-highlighting的并行化持续集成策略
  • wblog:基于Gin+Gorm构建个人博客的终极指南
  • 如何用nerdctl实现媒体服务的高效部署与优化:完整指南
  • 如何通过PackageObjectFactory实现Checkstyle的模块化配置与插件化开发
  • 5分钟打造专属代码格式化工作流:Micro编辑器插件深度配置指南
  • 如何快速上手helm-unittest?5分钟掌握Helm插件安装与基础测试编写
  • 剪板机组态王6.55与三菱PLC通过OPC通讯的联机程序之旅
  • SpongeAPI生态系统详解:插件开发资源与社区支持
  • 终极指南:Spring Security如何为边缘计算提供强大安全支持
  • 终极指南:如何在Ivy中优化模型并行同步点选择算法
  • 如何高效参与Java Native Access (JNA)开源项目:完整贡献指南