Jestem bardzo nowy w PyQt i staram się zapełnić formant QTableView.Najszybszy sposób na wypełnienie QTableView z ramki danych Pandy
Mój kod jest następujący:
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)
Właściwie w kodzie I uda się zapełnić QListView, ale wartości ustawić na QTableView nie są wyświetlane, również można zobaczyć, że obcięty wiersze do 10, ponieważ wyświetlenie setek wierszy ramki danych trwa wiecznie.
Jaki jest najszybszy sposób wypełnienia modelu tabeli z ramki danych pandy?
Z góry dziękuję.
Czy przetestowałeś rozwiązanie podane przez Wolpha, aby sprawdzić, czy zapewnia on lepszą wydajność? – ekhumoro
Jeszcze nie, również nie do końca rozumiem, więc zajmie mi to trochę czasu. –
Zrobiłem małe testowanie. W przypadku tabeli z 25 kolumnami i 10000 wierszy niestandardowy model jest około 40 razy szybszy (a różnica wydajności rośnie geometrycznie wraz ze wzrostem liczby wierszy/kolumn). Używało to prostej listy-list dla danych, więc wydaje się, że tworzenie wszystkich tych instancji 'QStandardItem' jest głównym wąskim gardłem. – ekhumoro