用Pyqt5展示dataframe

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

用Pyqt5展示dataframe

  • 前言
  • 一、具体思路
  • 二、实现代码
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
在大数据处理时,我们往往需要将pandas的dataframe用pyqt展示出来,这里提供一个简单的参考类,来帮助大家。


提示:以下是本篇文章正文内容,下面案例可供参考

一、具体思路

获取dataframe的行和列,然后遍历dataframe,把其数据放到QTableView()中。

二、实现代码

代码如下:

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import numpy as np
import pandas as pd


class QDataTable(QWidget):
    """
    @MethodName: QDataTable
    @Description: 用来接纳数据的数据表,在显示窗口显示
    @CalledBy:pyqtflowchart的QtreeWidegt
    @return: result_a
    @rtype: int
    """
    def __init__(self, data, parent=None):
        super(QDataTable, self).__init__(parent)
        # 设置初始大小
        self.resize(500, 300)
        # 获取dataframe的行列
        self.model = QStandardItemModel(data.shape[0], data.shape[1])
        # 设置水平方向的标头内容
        self.model.setHorizontalHeaderLabels(data.columns.values)
        for row in range(data.shape[0]):
            for column in range(data.shape[1]):
                sss = data[data.columns.values[column]][data.index.values[row]]
                sss = str(sss)
                item = QStandardItem(sss)
                # 设置每个位置的文本值
                self.model.setItem(row, column, item)

        # 实例化表格视图,设置模型为自定义的模型
        self.tableView = QTableView()
        self.tableView.setModel(self.model)
        #  设置它不能被编辑
        self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers)

        # 水平方向标签拓展剩下的窗口部分,填满表格
        self.tableView.horizontalHeader().setStretchLastSection(True)
        # 水平方向,表格大小拓展到适当的尺寸
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.tableView)
        self.setLayout(layout)



if __name__ == '__main__':
    app = QApplication(sys.argv)
    a = pd.DataFrame(np.arange(18).reshape(3, 6), index=['a', 'b', 'c'], columns=['A', 'B', 'C', 'D', 'E', 'F'])
    data = a
    table = QDataTable(data)
    table.show()
    sys.exit(app.exec_())


总结

使用的时候,直接往QDataTable类里面传一个自己的dataframe就行。

你可能感兴趣的:(qt,python,pandas)