Ich bin sehr neu zu PyQt und ich habe Schwierigkeiten, ein QTableView-Steuerelement zu bevölkern.Schnellste Möglichkeit, QTableView von Pandas Datenrahmen zu bevölkern
Mein Code ist folgende:
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)
Eigentlich in dem Code, den ich erfolgreich eine QListView zu füllen, aber die Werte, die ich auf die QTableView gesetzt werden nicht angezeigt, können Sie sehen auch, dass ich die Zeilen abgeschnitten 10 weil es ewig dauert, die Hunderte von Zeilen des Datenrahmens anzuzeigen.
Also, was ist der schnellste Weg, um das Tabellenmodell aus einem Pandas Datenrahmen zu füllen?
Vielen Dank im Voraus.
Haben Sie die von Wolph gegebene Lösung getestet, um zu sehen, ob sie bessere Leistung bringt? – ekhumoro
Noch nicht, auch ich verstehe es nicht ganz, also brauche ich etwas Zeit. –
Ich habe ein wenig getestet. Bei einer Tabelle mit 25 Spalten und 10000 Zeilen ist das benutzerdefinierte Modell ungefähr 40-mal schneller (und die Leistungsdifferenz wächst geometrisch, wenn die Anzahl der Zeilen/Spalten erhöht wird). Dies war eine einfache Liste von Listen für die Daten, so scheint es, dass die Schaffung aller Instanzen von "QStandardItem" der größte Engpass ist. – ekhumoro