def test_copyDataFrame(copy, operator):
    dataFrame = pandas.DataFrame([0], columns=['A'])
    model = DataFrameModel(dataFrame, copyDataFrame=copy)
    assert operator(id(model.dataFrame()), id(dataFrame))

    model.setDataFrame(dataFrame, copyDataFrame=copy)
    assert operator(id(model.dataFrame()), id(dataFrame))
Exemple #2
0
    def update(self, data):
        self.df = data
        self.labelInfo.setText("")
        self.model = DataFrameModel()

        self.widget.resize(self.widget.sizeHint())
        self.widget.show()
        self.widget.setViewModel(self.model)
        self.model.setDataFrame(data)
Exemple #3
0
 def __init__(self, parent=None):
     super(MainWindow, self).__init__(parent)
     self.setupUi(self)
     widget = self.pandastablewidget
     widget.resize(600, 500)
     self.model = DataFrameModel()#设置新的模型
     widget.setViewModel(self.model)
     self.df = pd.read_excel(r'./data/fund_data.xlsx', encoding='gdk')
     self.df_original = self.df.copy()#备份原始数据
     self.model.setDataFrame(self.df)
def test_setDataFrame():
    dataFrame = pandas.DataFrame([0], columns=['A'])
    model = DataFrameModel()
    model.setDataFrame(dataFrame)
    assert not model.dataFrame().empty
    assert model.dataFrame() is dataFrame

    with pytest.raises(TypeError) as excinfo:
        model.setDataFrame(None)
    assert "pandas.core.frame.DataFrame" in str(excinfo.value)
 def show_data(self):
     """
     展示读取进来的数据
     """
     self.widget = DataTableWidget(self.ui)
     model = DataFrameModel()
     model.setDataFrame(self.DataHelper.data)
     self.widget.setViewModel(model)
     self.widget.move(30, 200)
     self.widget.resize(350, 350)
     self.widget.show()
    def _previewFile(self):
        """Updates the preview widgets with new models for both tab panes.

        """
        dataFrame = self._loadCSVDataFrame()
        dataFrameModel = DataFrameModel(dataFrame, filePath=self._filename)
        dataFrameModel.enableEditing(True)
        self._previewTableView.setModel(dataFrameModel)
        columnModel = dataFrameModel.columnDtypeModel()
        columnModel.changeFailed.connect(self.updateStatusBar)
        self._datatypeTableView.setModel(columnModel)
Exemple #7
0
 def Updating_all_windows(self):
     if self.orignal_df is None:
         QMessageBox.information(self, '提示', '未读取数据', QMessageBox.Yes,
                                 QMessageBox.Yes)
     else:
         self.ErrorDataview_show()
         self.tableView_show()
         self.widget = self.pandastablewidget
         self.model = DataFrameModel()
         self.widget.setViewModel(self.model)
         self.model.setDataFrame(self.orignal_df)
Exemple #8
0
 def __init__(self, parent=None):
     super(MainWindow, self).__init__(parent)
     self.setWindowTitle("QtPandas")
     self.setWindowIcon(QIcon("./images/Python2.ico"))
     self.setupUi(self)
     widget = self.pandastablewidget
     widget.resize(600, 500)
     self.model = DataFrameModel()
     widget.setViewModel(self.model)
     self.df = pd.read_excel(r'./data/fund_data.xlsx', encoding='gbk')
     self.df_original = self.df.copy()
     self.model.setDataFrame(self.df)
def test_flags():
    model = DataFrameModel(pandas.DataFrame([0], columns=['A']))
    index = model.index(0, 0)
    assert index.isValid()
    assert model.flags(index) == Qt.ItemIsSelectable | Qt.ItemIsEnabled

    model.enableEditing(True)
    assert model.flags(index) == Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable

    model.setDataFrame(pandas.DataFrame([True], columns=['A']))
    index = model.index(0, 0)
    model.enableEditing(True)
    assert model.flags(index) != Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable
    assert model.flags(index) == Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable
Exemple #10
0
 def showdata(self):
     '''初始化pandasqt'''
     global data, data_orignal
     try:
         widget_qtpandas = self.pandastablewidget
         widget_qtpandas.resize(370, 250)
         self.model = DataFrameModel()  # 设置新的模型
         widget_qtpandas.setViewModel(self.model)
         data = pd.DataFrame(data)
         # self.data_orignal = self.data.copy(deep=False)  #浅拷贝,旧地址的内容改变不会改变新地址的内容
         self.model.setDataFrame(data)
         self.label_status.setText('欢迎使用本程序')  # 任务栏显示信息完成
     except Exception as e:
         self.Warning_QMessageBox(str(e))
Exemple #11
0
 def viewFile(self):
     '''
     展示文件的函数
     :return:
     '''
     if self.orignal_df.empty:
         QMessageBox.warning(self, '警告', '文件为空文件!', QMessageBox.Yes,
                             QMessageBox.Yes)
     self.ErrorDataview_show()
     self.tableView_show()
     self.label_2.close()
     self.widget = self.pandastablewidget
     self.model = DataFrameModel()
     self.widget.setViewModel(self.model)
     self.model.setDataFrame(self.orignal_df)
Exemple #12
0
    def save_file(self, filepath, save_as=None, keep_orig=False, **kwargs):
        """
        Saves a DataFrameModel to a file.

        :param filepath: (str)
            The filepath of the DataFrameModel to save.
        :param save_as: (str, default None)
            The new filepath to save as.
        :param keep_orig: (bool, default False)
            True keeps the original filepath/DataFrameModel if save_as is specified.
        :param kwargs:
            pandas.DataFrame.to_excel(**kwargs) if .xlsx
            pandas.DataFrame.to_csv(**kwargs) otherwise.
        :return: None
        """
        df = self._models[filepath].dataFrame()
        kwargs['index'] = kwargs.get('index', False)

        if save_as is not None:
            to_path = save_as
        else:
            to_path = filepath

        ext = os.path.splitext(to_path)[1].lower()

        if ext == ".xlsx":
            kwargs.pop('sep', None)
            df.to_excel(to_path, **kwargs)

        elif ext in ['.csv', '.txt']:
            df.to_csv(to_path, **kwargs)

        else:
            raise NotImplementedError(
                "Cannot save file of type {}".format(ext))

        if save_as is not None:
            if keep_orig is False:
                # Re-purpose the original model
                # Todo - capture the DataFrameModelManager._updates too
                model = self._models.pop(filepath)
                model._filePath = to_path
            else:
                # Create a new model.
                model = DataFrameModel()
                model.setDataFrame(df, copyDataFrame=True, filePath=to_path)

            self._models[to_path] = model
Exemple #13
0
    def accepted(self):
        """Successfully close the widget and return the loaded model.

        This method is also a `SLOT`.
        The dialog will be closed, when the `ok` button is pressed. If
        a `DataFrame` was loaded, it will be emitted by the signal `load`.

        """
        model = self._previewTableView.model()
        if model is not None:
            df = model.dataFrame().copy()
            dfModel = DataFrameModel(df)
            self.load.emit(dfModel, self._filename)
            print(("Emitted model for {}".format(self._filename)))
        self._resetWidgets()
        self.accept()
Exemple #14
0
    def showAttributesData(self, attributes_data):
        '''初始化指定属性显示表格信息的qtpandastablewidget(qtpandas_attributewidget)'''
        global pyechartsdata
        pyechartsdata = attributes_data
        self.attributes_data = attributes_data
        try:
            attributewidget_qtpandas = self.qtpandas_attributewidget
            self.attributesmodel = DataFrameModel()
            attributewidget_qtpandas.setViewModel(self.attributesmodel)
            self.attributesmodel.setDataFrame(self.attributes_data)
            #self.pyechartsthread.start()
            #self.browser.load(QUrl('D:/办公软件/Python源文件/数据挖掘应用/render.html'))  # 本地Html需要使用绝对地址 ,且用‘/’

            #self.showmatplotlib_signal.emit()  #属性图标显示出来后发送视图显示的信号

        except Exception as e:
            self.Warning_QMessageBox(str(e))
Exemple #15
0
    def __init__(self, parent=None):
        """
        Constructor

        @param parent reference to the parent widget
        @type QWidget
        """
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        '''初始化pandasqt'''
        widget = self.pandastablewidget
        widget.resize(600, 500)  # 如果对部件尺寸大小不满意可以在这里设置

        self.model = DataFrameModel()  # 设置新的模型
        widget.setViewModel(self.model)

        self.LoadFileName = None
Exemple #16
0
    def __init__(self):
        super(BaiduMapCrawler_main, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("百度地图数据采集工具_by_夜雨微寒")
        self.setWindowIcon(QtGui.QIcon(r'./resource/image/spider3.png'))
        self.result = []
        '''初始化pandasqt'''
        widget = self.pandastablewidget
        # 设置qtpandas.DataFrameMode()
        self.model = DataFrameModel()
        widget.setViewModel(self.model)

        # 初始化省份
        self.comboBox_prov.clear()
        self.comboBox_prov.addItem('请选择')
        for k, v in province_dict.items():
            self.comboBox_prov.addItem(v, k)
Exemple #17
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        # qtpandas 设置 tableWidget
        tableWidget = self.tableWidget
        self.model = DataFrameModel()
        tableWidget.setViewModel(self.model)

        self.df = None  # 用于操作的数据
        self.df_temp = None  # 用于撤销的数据
        self.df_original = None  # 用于初始化的数据

        # 数据导入 tab
        self.pushButton_openfile.clicked.connect(self.open_file)

        self.saveDataButton.clicked.connect(self.save_data)
        self.initDataButton.clicked.connect(self.init_data)
        self.pushButton_refresh.clicked.connect(self.data_shape)
        self.pushButton_refresh.clicked.connect(self.data_describe)
        self.plotButton.clicked.connect(self.image_plot)

        # 特征预处理 tab
        self.checkNaNButton.clicked.connect(self.check_NaN)
        self.okButton_nan.clicked.connect(self.deal_with_NaN)
        self.repealButton_nan.clicked.connect(self.repeal_action)
        self.okButton_nondim.clicked.connect(self.nondim_action)
        self.repealButton_nondim.clicked.connect(self.repeal_action)
        self.initButton_nondim.clicked.connect(self.init_data)

        # 绘图设置 tab
        self.radioButton_2D.toggled.connect(self.set_page_show)
        self.radioButton_2Dline.toggled.connect(self.set_page_show)
        self.radioButton_2Dscatter.toggled.connect(self.set_page_show)
        self.radioButton_2Dhist.toggled.connect(self.set_page_show)
        # self.radioButton_2Dpie.toggled.connect(self.set_page_show)
        self.comboBox_fitmethod.activated.connect(self.set_page_show)
        self.radioButton_3D.toggled.connect(self.set_page_show)
        self.radioButton_3Dline.toggled.connect(self.set_page_show)
        self.radioButton_3Dscatter.toggled.connect(self.set_page_show)
        self.radioButton_3Dsurface.toggled.connect(self.set_page_show)

        # 跟随主窗口关闭所有绘图
        self.close_signal.connect(lambda: plt.close('all'))
    def test_remove_columns_random(self, dataFrame):

        columnNames = dataFrame.columns.tolist()
        columnNames = [(i, n) for i, n in enumerate(columnNames)]

        for cycle in range(1000):
            elements = random.randint(1, len(columnNames))
            names = random.sample(columnNames, elements)
            df = dataFrame.copy()
            model = DataFrameModel(df)
            assert not model.removeDataFrameColumns(names)
            model.enableEditing(True)
            model.removeDataFrameColumns(names)

            _columnSet = set(columnNames)
            _removedSet = set(names)
            remainingColumns = _columnSet - _removedSet
            for idx, col in remainingColumns:
                assert col in model.dataFrame().columns.tolist()
Exemple #19
0
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget
        @type QWidget
        """
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        '''初始化pandasqt'''
        widget = self.pandastablewidget
        widget.resize(600, 500)  # 如果对部件尺寸大小不满意可以在这里设置

        self.model = DataFrameModel()  # 设置新的模型
        widget.setViewModel(self.model)

        self.df = pd.read_excel(r'./data/fund_data.xlsx', encoding='gbk')
        self.df_original = self.df.copy()  # 备份原始数据
        self.model.setDataFrame(self.df)
Exemple #20
0
    def __init__(self, parent=None):
        super(MyMainWidget, self).__init__(parent)
        self.setupUi(self)

        self.setLayout(self.gridLayout)

        # 退出窗口
        self.quit_btn.clicked.connect(self.quit_act)

        # qtpandas
        model = DataFrameModel()  # 空模型那个用于存储和处理数据
        # print(type(self.widget_2))
        self.widget_2.setViewModel(model)
        data = {'A': [10, 11, 12], 'B': [12, 11, 10], 'C': ['a', 'b', 'c']}
        self.df = pandas.DataFrame(data)
        self.df['A'] = self.df['A'].astype(np.int8)  # 委托,规定某一列的类型
        model.setDataFrame(self.df)

        # 保存数据
        self.quit_btn_7.clicked.connect(self.save_data)
	def __init__(self, parent=None):
		'''
		Constructor

			@param parent reference to the parent widget
			@type QWidget
		'''
		super(MainWindow, self).__init__(parent)
		self.setupUi(self)

		'''初始化pandasqt'''
		widget = self.pandastablewidget
		widget.resize(600, 500)

		self.model = DataFrameModel() # 設定新的模型
		widget.setViewModel(self.model)

		self.df = pd.read_excel(r'./data/fund_data.xlsx',encoding='big5')
		self.df_original = self.df.copy() # 備份原始資料
		self.model.setDataFrame(self.df)
Exemple #22
0
    def offer(self):  # 订单
        # self.offerwidget = DataTableWidget()
        widget = self.offerwidget
        widget.resize(600, 500)  # 如果对部件尺寸大小不满意可以在这里设置

        self.model = DataFrameModel()  # 设置新的模型
        widget.setViewModel(self.model)

        # conn = pymysql.connect(host='localhost', port=3308,user='******',password='******',db='mrp',charset='utf8')
        # # 通过sqlalchemy.create_engine建立连接引擎
        # engine = create_engine('mysql+pymysql://root:root@localhost:3308/mrp')
        # sql = 'select * from quote'
        # self.df = pd.read_sql(sql, con=conn)#MySQL法连接数据库,读取数据需要转换
        # self.df = pd.read_sql(sql, engine)#SQLAlchemy法可以直接创建dataframe
        # self.df.to_sql(name='user',con=engine,if_exists='append',index=False)  写入数据库
        # df.to_sql(目标表名,con=engine, schema=数据库名, index=False, index_label=False, if_exists='append', chunksize=1000)
        # pd.io.sql.to_sql(df,table_name,con=conn,schema='w_analysis',if_exists='append') 两个语句???

        self.df = pd.read_excel(r'C:/Users/Administrator/Desktop/报价模板.xlsx',
                                encoding='utf-8')
        # self.df_original = self.df.copy() # 备份原始数据
        self.model.setDataFrame(self.df)

        # d = self.df.loc[:,'num'].sum()
        d = sum(self.df['单重'])
        print('d' + str(d))
        # self.df.apply(sum)
        # column_sum = self.df.iloc[:,j].sum()

        # dtypedict = {}
        # for i, j in zip(self.df.columns, self.df.dtypes):
        #     # if "object" in str(j):
        #     #     dtypedict.update({i: VARCHAR(256)})
        #     # if "float" in str(j):
        #     #     dtypedict.update({i: NUMBER(19,8)})
        #     if "int" in str(j):
        #         dtypedict.update({i: VARCHAR(19)})
        # return dtypedict
        # print(dtypedict)
        """
Exemple #23
0
    def setDataFrame(self, dataFrame):
        self.df = dataFrame
        dataModel = DataFrameModel()
        dataModel.setDataFrame(self.df)

        self.dataModel = dataModel

        self.dataListView.setModel(dataModel)
        self.dataTableView.setViewModel(dataModel)
        self.dataComboBox.setModel(dataModel)

        # self.dataTableView.resizeColumnsToContents()

        # create a simple item model for our choosing combobox
        columnModel = QtGui.QStandardItemModel()
        for column in self.df.columns:
            columnModel.appendRow(QtGui.QStandardItem(column))
        self.chooseColumnComboBox.setModel(columnModel)

        self.tableViewColumnDtypes.setModel(dataModel.columnDtypeModel())
        self.tableViewColumnDtypes.horizontalHeader().setDefaultSectionSize(200)
        self.tableViewColumnDtypes.setItemDelegateForColumn(1, DtypeComboDelegate(self.tableViewColumnDtypes))
        dataModel.changingDtypeFailed.connect(self.changeColumnValue)
Exemple #24
0
    def setupUi(self, Mine5):
        Mine5.setObjectName("Mine5")
        Mine5.resize(1259, 879)
        Mine5.setStyleSheet("border-image: url(:/M11.jpg);")
        Mine5.setWindowFlags(Qt.FramelessWindowHint)
        self.form = Mine5
        self.centralwidget = QtWidgets.QWidget(Mine5)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, -10, 861, 101))
        self.pushButton.setStyleSheet("border-image: url(:/M16.jpg);\n"
"font: 14pt \"华文新魏\";")
        self.pushButton.setObjectName("pushButton")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(890, 0, 361, 81))
        self.label_2.setStyleSheet("\n"
"border-image: url(:/M10.jpg);")
        self.label_2.setObjectName("label_2")
        self.pandastablewidget = DataTableWidget(self.centralwidget)
        self.pandastablewidget.setGeometry(QtCore.QRect(-10, 90, 1251, 741))
        self.pandastablewidget.setStyleSheet("border-image: url(:/M8.png);")
        self.pandastablewidget.setObjectName("pandastablewidget")
        self.model = DataFrameModel()
        self.pandastablewidget.setViewModel(self.model)
        self.model.setDataFrame(db)
        Mine5.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Mine5)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1259, 26))
        self.menubar.setObjectName("menubar")
        Mine5.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Mine5)
        self.statusbar.setObjectName("statusbar")
        Mine5.setStatusBar(self.statusbar)

        self.retranslateUi(Mine5)
        self.pushButton.clicked.connect(self.click1)
        QtCore.QMetaObject.connectSlotsByName(Mine5)
Exemple #25
0
    def test_editing(self, dataFrame, qtbot):
        model = DataFrameModel(dataFrame)

        tableView = QtGui.QTableView()

        qtbot.addWidget(tableView)
        tableView.setModel(model)

        delegate = TextDelegate(tableView)
        createDelegate(numpy.dtype('O'), 0, tableView)
        tableView.show()

        index = model.index(0, 0)
        preedit_data = index.data()

        assert not model.editable
        model.enableEditing(True)
        tableView.edit(index)
        editor = tableView.findChildren(QtGui.QLineEdit)[0]
        qtbot.keyPress(editor, QtCore.Qt.Key_F)
        qtbot.keyPress(editor, QtCore.Qt.Key_Enter)
        QtGui.QApplication.processEvents()
        with qtbot.waitSignal(timeout=100):
            assert index.data(QtCore.Qt.DisplayRole) == 'f'
Exemple #26
0
standard_library.install_aliases()
import pandas
import numpy
import sys
from qtpandas.excepthook import excepthook

# Use QtGui from the compat module to take care if correct sip version, etc.
from qtpandas.compat import QtGui
from qtpandas.models.DataFrameModel import DataFrameModel
from qtpandas.views.DataTableView import DataTableWidget
# from qtpandas.views._ui import icons_rc

sys.excepthook = excepthook  # 設定PyQt的異常鉤子,基本上在本例沒什麼作用

# 建立一個空的模型,該模型用來儲存與處理資料
model = DataFrameModel()

# 建立一個應用程式顯示表格
app = QtGui.QApplication([])
widget = DataTableWidget()  # 建立一個空的表格,用來呈現資料
widget.resize(500, 300)  # 調整Widget的大小
widget.show()
# 讓表格繫結模型,也就是呈現模型的內容
widget.setViewModel(model)

# 建立測試資料
data = {
    'A': [10, 11, 12],
    'B': [20, 21, 22],
    'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell']
}
def test_headerData(orientation, role, index, expectedHeader):
    model = DataFrameModel(pandas.DataFrame([0], columns=['A']))
    assert model.headerData(index, orientation, role) == expectedHeader
def test_TimestampFormat():
    model = DataFrameModel()
    assert model.timestampFormat == Qt.ISODate
    newFormat = "yy-MM-dd hh:mm"
    model.timestampFormat = newFormat
    assert model.timestampFormat == newFormat
 def model(self, dataFrame):
     return DataFrameModel(dataFrame)
def test_initDataFrameWithDataFrame():
    dataFrame = pandas.DataFrame([0], columns=['A'])
    model = DataFrameModel(dataFrame)
    assert not model.dataFrame().empty
    assert model.dataFrame() is dataFrame