当前位置: 首页 > 面试题库 >

从Pandas数据框中填充QTableView的最快方法

长孙诚
2023-03-14
问题内容

我是PyQt的新手,正在努力填充QTableView控件

我的代码如下:

def data_frame_to_ui(self, data_frame):
        """
        Displays a pandas data frame into the GUI
        """
        list_model = QtGui.QStandardItemModel()
        i = 0
        for val in data_frame.columns:
            # for the list model
            if i > 0:
                item = QtGui.QStandardItem(val)
                #item.setCheckable(True)
                item.setEditable(False)
                list_model.appendRow(item)
            i += 1
        self.ui.profilesListView.setModel(list_model)

        # for the table model
        table_model = QtGui.QStandardItemModel()

        # set table headers
        table_model.setColumnCount(data_frame.columns.size)
        table_model.setHorizontalHeaderLabels(data_frame.columns.tolist())
        self.ui.profileTableView.horizontalHeader().setStretchLastSection(True)

        # fill table model data
        for row_idx in range(10): #len(data_frame.values)
            row = list()
            for col_idx in range(data_frame.columns.size):
                val = QtGui.QStandardItem(str(data_frame.values[row_idx][col_idx]))
                row.append(val)
            table_model.appendRow(row)

        # set table model to table object
        self.ui.profileTableView.setModel(table_model)

实际上,在代码中,我成功地填充了QListView,但是未显示我设置为QTableView的值,您还可以看到我将行截断为10,因为它永远需要显示数据帧的数百行。

那么,从熊猫数据框中填充表模型的最快方法是什么?

提前致谢。


问题答案:

就我个人而言,我将创建自己的模型类以使其处理起来更加容易。

例如:

import sys
from PyQt4 import QtCore, QtGui
Qt = QtCore.Qt

class PandasModel(QtCore.QAbstractTableModel):
    def __init__(self, data, parent=None):
        QtCore.QAbstractTableModel.__init__(self, parent)
        self._data = data

    def rowCount(self, parent=None):
        return len(self._data.values)

    def columnCount(self, parent=None):
        return self._data.columns.size

    def data(self, index, role=Qt.DisplayRole):
        if index.isValid():
            if role == Qt.DisplayRole:
                return QtCore.QVariant(str(
                    self._data.values[index.row()][index.column()]))
        return QtCore.QVariant()


if __name__ == '__main__':
    application = QtGui.QApplication(sys.argv)
    view = QtGui.QTableView()
    model = PandasModel(your_pandas_data)
    view.setModel(model)

    view.show()
    sys.exit(application.exec_())


 类似资料:
  • 问题内容: 创建给定大小的零填充熊猫数据框的最佳方法是什么? 我用过了: 有更好的方法吗? 问题答案: 您可以尝试以下方法:

  • 问题内容: 用伪数据填充SQL表的最快方法是什么? 我有一张宽桌子,上面有大约40种不同类型的字段(int,bit,varchar等),需要进行一些性能测试。我正在使用SQL Server 2008。 谢谢! 问题答案: RedGate的SQL数据生成器 一键生成数据 基于列和表名称的真实数据 如果需要,可以自定义数据 消除了数小时的繁琐工作 完全支持SQL Server 2008

  • 问题内容: 我有一个像这样的熊猫数据框“ df”: 它丢失了一些行,我想像这样填补中间的空白: 有python方式可以做到这一点吗? 问题答案: 您需要构造完整索引,然后使用数据框的方法。像这样 然后,您可以使用该方法将NaN设置为所需的值。 更新(2014年6月) 只是必须自己重新审视一下……在当前版本的熊猫中,有一个函数可以从可迭代的笛卡尔积中构建。因此上述解决方案可能变为: 我认为这很优雅。

  • 这是我的代码只有第一个下拉框正在填充。我可以重复下拉框,但无法填充所有下拉框。请帮帮我... 我可以重复下拉框,但无法填充所有下拉框。请帮帮我... 我想将数据库中的数据显示到所有下拉框中,并保存所选值。我使用的提交按钮不起作用,请告诉我原因?

  • 我想在一个组合框中填充一些数据。这很好。但是,我想动态地改变组合框中的数据。 目前我有一个表,在组合框中,我在表列中显示数据的唯一值。现在,表数据存储在静态可观察列表变量中。我想根据表中显示的数据更改组合框中的数据。也就是说,如果存储表数据的静态可观察列表发生更改,我希望在没有手动干预的情况下更改组合框数据。 如果没有单独的静态变量用于组合框,这是否可能?

  • series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $