赞
踩
Pandas是 Python的一个数据分析包,是由AQR Capital Management在2008年4月开发的,并于2009年年底开源,目前由专注于Python数据包开发的PyData开发组继续开发和维护,属于PyData项目的一部分。Pandas最初是被作为金融数据分析工具而开发的,并为时间序列分析提供了很好的支持。从 Pandas 这个名称就可以看出,它是面板数据(Panel Data)和 Python数据分析(Data Analysis)的结合
在Pandas出现之前,Python数据分析的主力军只有NumPy比较好用;在 Pandas出现之后,它基本上占据了Python数据分析的霸主地位,它在处理基础数据尤其是金融时间序列数据方面非常高效。
使Pandas与 PyQt结合,最方便的方法就是安装qtpandas模块库。这个模块库帮助我们把Pandas 的数据显示在 QTableWidget上,并自动实现各种QTableWidget的功能,如增加、删除、修改、保存、排序等。这些功能实现起来比较麻烦,但是利用qtpandas,我们就可以无须费力地手动重新实现。
安装pandas
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
安装qtpandas
pip install qtpandas -i https://pypi.tuna.tsinghua.edu.cn/simple
可以看到安装失败了,啊这,开始谷歌…
https://github.com/draperjames/qtpandas
下载到本地
解压
从虚拟环境切到该目录进行安装
安装时会卡在一个包,叫
这个时候,请出清华源,先把这个包装了,
再次尝试
没有报错,走下来了
查看是否安装成功
跑一下
报错了
大佬说原因应该是pandas版本升高了,
跟着错误找过去
改成这样
再次运行官方示例
很好,又报错了
改成import *
再次运行
窗口出来了
又出现了野生的错误
开始谷歌…
再次执行
完美运行
【解决Qt Designer中没有DataTableWidget和DataFrameModel两个类对应的窗口控件】
所谓提升的窗口控件,就是指有些窗口控件是用户自己基于PyQt定义的衍生窗口控件,这些窗口控件在Qt Designer中没有直接提供,但是可以通过提升的窗口控件这个功能来实现。具体方法如下:
点击添加
提升
导出ui转为py
提升的窗口控件是PyQt中非常简单、实用而又强大的功能,利用该功能可以通过Qt Designer来实现PyQt与Python 的一些强大的模块之间的交互功能,可以充分利用PyQt和 Python两者的优点来快速开发程序。
UI: Ui_pandas_pyqt.py
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'pandas_pyqt.ui' # # Created by: PyQt5 UI code generator 5.6 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.pushButton = QtWidgets.QPushButton(self.centralWidget) self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.pandastablewidget = DataTableWidget(self.centralWidget) self.pandastablewidget.setGeometry(QtCore.QRect(10, 30, 591, 331)) self.pandastablewidget.setStyleSheet("") self.pandastablewidget.setObjectName("pandastablewidget") MainWindow.setCentralWidget(self.centralWidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "数据初始化")) self.pushButton_2.setText(_translate("MainWindow", "保存数据")) from qtpandas.views.DataTableView import DataTableWidget
pandas_pyqt.py
# -*- coding: utf-8 -*- """ Module implementing MainWindow. """ from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QMainWindow, QApplication from Ui_pandas_pyqt import Ui_MainWindow from qtpandas.models.DataFrameModel import DataFrameModel import pandas as pd class MainWindow(QMainWindow, Ui_MainWindow): """ Class documentation goes here. """ 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') self.df_original = self.df.copy() # 备份原始数据 self.model.setDataFrame(self.df) @pyqtSlot() def on_pushButton_clicked(self): """ 初始化pandas """ self.model.setDataFrame(self.df_original) @pyqtSlot() def on_pushButton_2_clicked(self): """ 保存数据 """ self.df.to_excel(r'data/fund_data_new.xlsx') if __name__ == "__main__": import sys from pyqt5_plugins.examples.exampleqmlitem import QtCore QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QApplication(sys.argv) ui = MainWindow() ui.show() sys.exit(app.exec_())
运行
通过窗口更改数据,查看原来的Excel表格数据,即“new”中的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。