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”中的。
Bubble Sort: It is an algorith
Reprinted from : How to be in