首页 > 编程语言 >Python使用PyCharm+PySide6+Pandas创建QTableView显示Excel工作簿数据

Python使用PyCharm+PySide6+Pandas创建QTableView显示Excel工作簿数据

时间:2024-08-11 18:49:10浏览次数:11  
标签:head Python Excel excel PySide6 df model col

import sys
import warnings
from pathlib import Path

import pandas as pd
from PySide6 import QtWidgets
from PySide6.QtCore import Qt
from PySide6.QtGui import QStandardItemModel


# 读取Excel工作簿数据
def read_excel_with_pandas(path_excel, _cols):
    """
    :param path_excel:Excel工作簿全路径
    :param _cols:读取Excel工作簿的列数
    功能:读取Excel工作簿指定列数,返回表头列表、行数据列表
    """
    assert path_excel.exists(), f'Excel工作簿“{path_excel}”务必存在!!!'
    str_dict = {i: str for i in range(_cols)}  # 每列都转换为str
    df = pd.read_excel(path_excel, sheet_name=0, header=None, skiprows=1, converters=str_dict)  # 使用pandas读取Excel
    pd.set_option('future.no_silent_downcasting', True)  # 不提示函数在未来版本中将被替代的警告
    df = df.replace(r'\s+', '', regex=True)  # 删除所有字符串列的空格(姓名中的空格在此去除)
    df = df.iloc[:, 1:_cols]  # 取15列:B:P,跳过序号列
    df = df.dropna(subset=[1])  # 删除第1列(姓名)具有"NaN"的行
    df = df.fillna('')  # 将nan替换为''
    head_list = df.values.tolist()[0]  # 表头列表
    info_lists = df.values.tolist()[1:]  # 信息列表,数据帧转列表,每行对应一个列表(包括表头)
    return head_list, info_lists


# 创建数据模型
def setup_model(_head, _rows):
    """
    :param _head:Excel工作簿表头列表
    :param _rows:Excel工作簿行数据列表
    """
    _row = len(_rows)  # 行数
    _col = len(_head)  # 列数
    # 创建模型并填充数据
    model = QStandardItemModel(_row, _col)
    for col in range(model.columnCount()):  # 设置表头
        model.setHeaderData(col, Qt.Orientation.Horizontal, f"{_head[col]}")
    for row in range(model.rowCount()):  # 设置模型数据
        for col in range(model.columnCount()):
            model.setData(model.index(row, col), f"{_rows[row][col]}")
    return model


# 定义主函数
def main():
    app = QtWidgets.QApplication()

    model = setup_model(head, rows)
    # 创建并配置QTableView
    table_view = QtWidgets.QTableView()
    table_view.setModel(model)  # 设置视图数据模型
    table_view.setWindowTitle("QTableView Example")
    table_view.resize(1024, 768)
    table_view.show()  # 显示窗口

    sys.exit(app.exec())


if __name__ == '__main__':
    # 忽略UserWarning: Data Validation extension的警告(Excel读取时出现)
    warnings.simplefilter(action='ignore', category=UserWarning)
    excel_path = Path(__file__).parent / 'data/特种作业报名表(生成表)6.19.xlsx'
    head, rows = read_excel_with_pandas(excel_path, 16)
    main()

标签:head,Python,Excel,excel,PySide6,df,model,col
From: https://www.cnblogs.com/zdt168/p/18353735

相关文章

  • python爬虫
    爬虫一、爬虫的分类1、通用爬虫 实例百度,360,google、搜狗等搜索引擎功能 访问网页-》抓取数据-》数据存储-》数据处理-》提供检测服务robots协议一个约定俗成的协议,添加robots.txt文件,来说明本网站哪些内容不可以被抓取,之际写的爬虫无需遵守网站排名......
  • PythonL-Chapter_01_基础语法
    注释#这是单行注释"""这是多行注释可以写多行文字"""变量和数据类型内置基本数据类型整数(int):用于表示没有小数部分的数字,例如-1,0,1,100等浮点数(float):用于表示带有小数部分的数字,例如3.14,2.718字符串(str):用于表示文本信息,必须使用引号(单引......
  • Selenium + Python 自动化测试11(unittest组织用例)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了unittest基本使用方法。        本篇文章我们接着讲。一些概念和一些常用的构造测试集的方法。1、基本概念1)TestCase        一个TestCase的......
  • Selenium + Python 自动化测试10(unittest概念)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上几篇我们讨论了元素的定位方法、操作方法以及一些特殊元素的操作。        在实际的测试项目组中每个模块会写多条案例,如第一条用例那里我们的登录。登录的话就可以有多条......
  • python毕业设计基于Django的汽车租赁系统
    文末获取资源,收藏关注不迷路文章目录一、项目介绍二、主要使用技术三、研究内容四、核心代码五、文章目录一、项目介绍随着经济的飞速发展和人们生活水平的显著提升,汽车已经成为现代生活中不可或缺的重要交通工具。然而,随着城市化进程的加快,交通拥堵、停车难以及高......
  • 【学习笔记】Matlab和python双语言的学习(图论最短路径)
    文章目录前言一、图论基本概念示例二、代码实现----Matlab三、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187QF?p=36&vd_source=67471d3a1b4f517b7a7964093e62f7e6一、图论图论(G......
  • 21:Python函数全局变量和局部变量
    #全局变量与局部变量,全局变量大写,局部变量小写NAME='ladfs'#定义全局变量,全局作用域顶格defchange_name():print('change_name',NAME)#调用全局变量change_name()#全局变量与局部变量NAME='ladfs'#定义全局变量defchange_name():......
  • 使用条件语句登录QQ(Pythonn实验实训项目)
    实验目的1、掌握变量的创建方法及变量赋值运算的使用方法;2、掌握的掌握if-elif--else条件语句和循环语句的嵌套使用;3、掌握比较运算符的应用;4、掌握输入语句的使用方法;5、掌握continue和break语句的用法。二、实验内容使用条件语句实现QQ登录:若用户名和密码都输入正确,则......
  • 搭建python私有仓库
    1.创建帐号密码文件,并添加内容touch/opt/pyserver/.htpasswdecho"username:password">/opt/pyserver/.htpasswd2.创建包路径mkdir/opt/pyserver/packages3.创建私有仓库#不带转发的命令dockerrun--namepypi--restartalways-v/opt/pyserver/packages:/d......
  • 探索Python中的插入排序算法
    探索Python中的插入排序算法插入排序(InsertionSort)是一种简单直观的排序算法。虽然在大规模数据集上效率不如一些高级排序算法,但插入排序在处理小规模数据集或部分有序的数据时表现非常优秀。本文将介绍插入排序的工作原理、实现方法以及它的时间复杂度。插入排序的工作......