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

 更新时间:2026年03月18日 08:27:00   作者:小庄-Python办公  
在日常办公和数据分析中,我们经常需要处理各种 Excel 和 CSV 文件,为了提高工作效率,今天我们将手把手教大家使用 PyQt5 和 Pandas 开发一款图形化的表格读取与处理工具,需要的朋友可以参考下

使用 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) 文件的必备引擎。

安装依赖

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

pip install PyQt5 pandas openpyxl

核心代码解析

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

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

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

class DragDropWidget(QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setText("拖拽单个/多个文件或目录到此处\n(支持 Excel/CSV)")
        self.setAcceptDrops(True)
        self.main_window = parent

    def dragEnterEvent(self, event: QDragEnterEvent):
        # 允许接收包含路径的文件拖拽
        if event.mimeData().hasUrls():
            event.acceptProposedAction()

    def dropEvent(self, event: QDropEvent):
        urls = event.mimeData().urls()
        paths = [url.toLocalFile() for url in urls]
        # 将获取到的路径交给主窗口处理
        self.main_window.handle_dropped_files(paths)

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

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

class PandasModel(QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self._data = data

    def rowCount(self, parent=None):
        return self._data.shape[0]

    def columnCount(self, parent=None):
        return self._data.shape[1]

    def data(self, index, role=Qt.DisplayRole):
        if index.isValid():
            if role == Qt.DisplayRole:
                val = self._data.iloc[index.row(), index.column()]
                return str(val) if not pd.isna(val) else ""
        return None

    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return str(self._data.columns[col])
        return None

在工具中,我们通过 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 方法搭配自定义函数实现:

def insert_str(s):
    s_str = str(s)
    if len(s_str) >= pos:
        return s_str[:pos] + val + s_str[pos:]
    return s_str + val

self.df[col] = self.df[col].apply(insert_str)

总结

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

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

以上就是使用PyQt5+Pandas打造一个表格(Excel/CSV)读取与处理工具的详细内容,更多关于PyQt5 Pandas表格读取与处理的资料请关注脚本之家其它相关文章!

相关文章

  • python轻松实现代码编码格式转换

    python轻松实现代码编码格式转换

    由于某些原因,需要将代码从A机房迁移到B机房,这两个之间不能互相访问,但是历史原因导致A机房的代码全是utf8编码的,B机房要求是GBK编码,看看这个怎么解决。虽然很简单,但是还是要推荐给大家,需要的小伙伴参考下吧。
    2015-03-03
  • 使用Python的Bottle框架写一个简单的服务接口的示例

    使用Python的Bottle框架写一个简单的服务接口的示例

    这篇文章主要介绍了使用Python的Bottle框架写一个简单的服务接口的示例,基于Linux系统环境,需要的朋友可以参考下
    2015-08-08
  • python流水线框架pypeln的安装使用教程

    python流水线框架pypeln的安装使用教程

    这篇文章主要介绍了python流水线框架pypeln的安装使用教程,通过安装pip install pypeln,基本元素在文中给大家介绍过,需要的朋友可以参考下
    2021-05-05
  • 解决Pytorch中的神坑:关于model.eval的问题

    解决Pytorch中的神坑:关于model.eval的问题

    这篇文章主要介绍了解决Pytorch中的神坑:关于model.eval的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 教你如何利用Python批量翻译英文Word文档并保留格式

    教你如何利用Python批量翻译英文Word文档并保留格式

    本文将给大家分享一个实用的Python办公自动化脚本 利用Python批量翻译英文Word文档并保留格式,最终效果甚至比部分收费的软件还要好!文中有非常详细的代码示例.需要的朋友可以参考下
    2021-05-05
  • Python实现日志实时监测的示例详解

    Python实现日志实时监测的示例详解

    观察者模式:是一种行为型设计模式。主要关注的是对象的责任,允许你定义一种订阅机制,可在对象事件发生时通知多个"观察"该对象的其他对象。本文将利用观察者模式实现日志实时监测,需要的可以参考一下
    2022-04-04
  • python中os.environ基本介绍及使用方法

    python中os.environ基本介绍及使用方法

    os.environ是Python中的一个字典对象,它包含了当前进程的环境变量,通过使用os.environ,可以获取和设置环境变量的值,这篇文章主要介绍了python中os.environ基本介绍及使用方法,需要的朋友可以参考下
    2023-08-08
  • Python简单实现词云图代码及步骤解析

    Python简单实现词云图代码及步骤解析

    这篇文章主要介绍了Python简单实现词云图代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python3图片转换二进制存入mysql

    python3图片转换二进制存入mysql

    MYSQL是支持把图片存入数据库的,也相应的有一个专门的字段BLOB (Binary Large Object),即较大的二进制对象字段,看下面代码
    2013-12-12
  • 使用Python保存网页上的图片或者保存页面为截图

    使用Python保存网页上的图片或者保存页面为截图

    这篇文章主要介绍了使用Python保存网页上的图片或者保存页面为截图的方法,保存网页图片主要用到urllib模块,即简单的爬虫原理,需要的朋友可以参考下
    2016-03-03

最新评论