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))
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)
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)
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)
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
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))
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)
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
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()
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))
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
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)
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()
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)
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)
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) """
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)
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)
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'
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