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

标签 python pandas pyqt4

我是 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,因为它需要永远显示数百行数据框架。

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

提前致谢。

最佳答案

就我个人而言,我会创建自己的模型类,以便于处理它。

例如:

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.iloc[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_())

关于python - 从 Pandas 数据框填充 QTableView 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31475965/

相关文章:

python - 获取下n个交易日功能太慢

python - 仅使用python置换最后一列

python - 从行值创建列并填充 - pandas

python - 将 Python 控制台输出打印到 Qtextedit

python - 如何使用QtWebKit设置浏览器的大小

python - "s"在 WordNet 同义词集中代表什么词性

python - 在 ubuntu 14.04 上安装 Scrapy 失败

python - 将数组添加到另一个 Python 的末尾

python - 是否可以更改 imshow matplotlib 可视化的宽度?

python - 使用 Anaconda Python 的 PyQt Windows 安装程序——未找到 PyQt4;我该如何排除故障?