我如何从QTableWidget检索数据到Dataframe?

问题描述 投票:0回答:3

我有一个处于可编辑模式的QTableWidget,用户在其中输入整数输入,如何生成在此表中输入的数据列表以对其执行操作,这是我的手动代码:

def dataframe_generation_from_table(self,table):
    number_of_rows = table.rowCount()
    number_of_columns = table.columnCount()

    tmp_df = pd.DataFrame({ 'Date' : [] , str(self.final_lvl_of_analysis) :[],  'Value': []}) 

    for i in range(0,number_of_rows):
        for j in range(0,number_of_columns):
            tmp_item = table.item(i,j)
            tmp_df2 = pd.DataFrame( { 'Date' : [pd.to_datetime(table.horizontalHeaderItem(j).data())] , str(self.final_lvl_of_analysis) :[ str(table.verticalHeaderItem(i).data())], 'Value': [float(tmp_item.data(0))]})
            print tmp_df2
            tmp_df.update(tmp_df2, join = 'left', overwrite = False)

    return tmp_df

此外,我正在使用以下代码生成QTableWidget:

    self.pd_table = QtGui.QTableWidget(self.groupBox_19)
    self.pd_table.setObjectName(_fromUtf8("pd_table"))
    self.pd_table.setColumnCount(0)
    self.pd_table.setRowCount(0)

我的规格是:pandas 0.18.1,PyQt 4和Python 2.7

python pandas pyqt pyqt4 qtablewidget
3个回答
2
投票

我认为您在更新/连接方面使它变得有些复杂。最简单的方法是先创建完整尺寸的DataFrame(用NaN填充),然后将数据分配给该尺寸:


1
投票

.data().text()的更改消除了ValueError


0
投票
# creates a new df from qtables dimensions,
# copies qtable (data & headers) to the df and returns the df
@staticmethod
def write_qtable_to_df(table):
    col_count = table.columnCount()
    row_count = table.rowCount()
    headers = [str(table.horizontalHeaderItem(i).text()) for i in range(col_count)]

    # df indexing is slow, so use lists
    df_list = []
    for row in range(row_count):
        df_list2 = []
        for col in range(col_count):
            table_item = table.item(row,col)
            df_list2.append('' if table_item is None else str(table_item.text()))
        df_list.append(df_list2)

    df = pandas.DataFrame(df_list, columns=headers)

    return df
© www.soinside.com 2019 - 2024. All rights reserved.