使用PyQt5+Pandas打造一個(gè)表格(Excel/CSV)讀取與處理工具

使用 PyQt5 + Pandas 打造全能的表格(Excel/CSV)讀取與處理工具
在日常辦公和數(shù)據(jù)分析中,我們經(jīng)常需要處理各種 Excel 和 CSV 文件。無論是進(jìn)行簡單的數(shù)據(jù)累加、去重,還是復(fù)雜的數(shù)據(jù)透 視、批量拆分,傳統(tǒng)的操作往往需要使用 Excel 的復(fù)雜函數(shù),或者編寫重復(fù)的 Python 腳本。
為了提高工作效率,今天我們將手把手教大家使用 PyQt5 和 Pandas 開發(fā)一款圖形化的表格讀取與處理工具。這款工具不僅支持直接拖拽文件加載,還能實(shí)時(shí)預(yù)覽,并內(nèi)置了多種常用的數(shù)據(jù)處理功能,非常適合零基礎(chǔ)辦公人員和數(shù)據(jù)分析師使用!
核心功能一覽
我們這款工具內(nèi)置了以下實(shí)用功能:
- 智能文件加載:支持點(diǎn)擊按鈕選擇,或直接拖拽單個(gè)/多個(gè)文件、甚至整個(gè)目錄到軟件中,自動(dòng)識(shí)別并合并 Excel (
.xls,.xlsx) 和.csv文件。 - 實(shí)時(shí)數(shù)據(jù)預(yù)覽:加載文件后,主界面會(huì)實(shí)時(shí)顯示數(shù)據(jù)的前 20 行,方便確認(rèn)數(shù)據(jù)是否正確。
- 自定義表頭:遇到表頭不在第一行的數(shù)據(jù)怎么辦?用戶可以自定義表頭所在的行數(shù),工具會(huì)自動(dòng)重新解析數(shù)據(jù)。
- 豐富的列操作:
- 快速對指定列進(jìn)行 累加、計(jì)數(shù)
- 對指定列進(jìn)行數(shù)據(jù) 去重
- 按照自定義分隔符將一列 拆分 為多列
- 一鍵數(shù)據(jù)透 視:圖形化選擇透 視的索引(Index)、列(Columns)和值(Values),自動(dòng)執(zhí)行求和透 視并支持一鍵導(dǎo)出結(jié)果。
- 大文件按行拆分:遇到幾十萬行的大文件處理卡頓?設(shè)置“每文件行數(shù)”,一鍵將大文件拆分為多個(gè)小文件保存。
- 強(qiáng)大的批量修改列功能:
- 全部修改為固定值
- 在數(shù)據(jù)頭部/尾部添加特定字符
- 在第 X 個(gè)字符后插入特定字符
- 擴(kuò)展功能:一鍵處理缺失值(如填充0、填充空字符串或直接刪除缺失行),以及一鍵導(dǎo)出當(dāng)前處理完畢的所有數(shù)據(jù)。
技術(shù)棧與依賴
本項(xiàng)目基于 Python 開發(fā),主要用到了以下三個(gè)強(qiáng)大的庫:
- PyQt5:負(fù)責(zé)構(gòu)建整個(gè)圖形化用戶界面 (GUI),提供了豐富的控件和交互能力。
- Pandas:負(fù)責(zé)底層的數(shù)據(jù)讀取、處理和分析,是數(shù)據(jù)處理的“核武器”。
- openpyxl:Pandas 讀寫新版 Excel (
.xlsx) 文件的必備引擎。
安裝依賴
可以通過以下命令一鍵安裝所有所需庫:
pip install PyQt5 pandas openpyxl
核心代碼解析
下面我們來拆解一下這個(gè)工具的幾個(gè)核心實(shí)現(xiàn)點(diǎn)。
1. 拖拽文件與目錄加載功能
為了讓用戶體驗(yàn)更好,我們繼承 QLabel 自定義了一個(gè) DragDropWidget,用于接收拖拽事件:
class DragDropWidget(QLabel):
def __init__(self, parent=None):
super().__init__(parent)
self.setText("拖拽單個(gè)/多個(gè)文件或目錄到此處\n(支持 Excel/CSV)")
self.setAcceptDrops(True)
self.main_window = parent
def dragEnterEvent(self, event: QDragEnterEvent):
# 允許接收包含路徑的文件拖拽
if event.mimeData().hasUrls():
event.acceptProposedAction()
def dropEvent(self, event: QDropEvent):
urls = event.mimeData().urls()
paths = [url.toLocalFile() for url in urls]
# 將獲取到的路徑交給主窗口處理
self.main_window.handle_dropped_files(paths)
2. Pandas 與 QTableView 聯(lián)動(dòng) (數(shù)據(jù)預(yù)覽)
要在 PyQt 的 QTableView 中展示 Pandas 數(shù)據(jù)框,我們需要自定義一個(gè) QAbstractTableModel,重寫其行數(shù)、列數(shù)和數(shù)據(jù)返回方法:
class PandasModel(QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def rowCount(self, parent=None):
return self._data.shape[0]
def columnCount(self, parent=None):
return self._data.shape[1]
def data(self, index, role=Qt.DisplayRole):
if index.isValid():
if role == Qt.DisplayRole:
val = self._data.iloc[index.row(), index.column()]
return str(val) if not pd.isna(val) else ""
return None
def headerData(self, col, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return str(self._data.columns[col])
return None
在工具中,我們通過 self.df.head(20) 獲取前 20 行數(shù)據(jù)并傳入該 Model,實(shí)現(xiàn)了輕量級(jí)的數(shù)據(jù)預(yù)覽。
3. 數(shù)據(jù)處理:拆分、去重與透 視
基于 Pandas 的強(qiáng)大功能,我們可以僅用幾行代碼實(shí)現(xiàn)復(fù)雜的邏輯:
- 去重:
self.df = self.df.drop_duplicates(subset=[col]) - 拆分列:
new_cols = self.df[col].astype(str).str.split(sep, expand=True) - 數(shù)據(jù)透 視:
pivot_df = pd.pivot_table(
self.df,
values=val,
index=idx,
columns=col,
aggfunc='sum',
fill_value=0
)
4. 字符串的精細(xì)批量修改
對于“在第 X 個(gè)字符后插入內(nèi)容”這種需求,我們可以利用 Pandas 的 apply 方法搭配自定義函數(shù)實(shí)現(xiàn):
def insert_str(s):
s_str = str(s)
if len(s_str) >= pos:
return s_str[:pos] + val + s_str[pos:]
return s_str + val
self.df[col] = self.df[col].apply(insert_str)
總結(jié)
通過將 PyQt5 和 Pandas 結(jié)合,我們打造出了一個(gè)功能完備、界面友好的本地?cái)?shù)據(jù)處理利器。這個(gè)工具不僅能極大提升我們處理零碎 Excel 文件的效率,更提供了一個(gè)很好的學(xué)習(xí)范例——你可以根據(jù)自己的實(shí)際業(yè)務(wù)需求,在 main.py 的選項(xiàng)卡中繼續(xù)添加更多自定義的數(shù)據(jù)清洗和分析功能!
快把這份代碼運(yùn)行起來,讓你的數(shù)據(jù)處理工作從此告別加班吧!
以上就是使用PyQt5+Pandas打造一個(gè)表格(Excel/CSV)讀取與處理工具的詳細(xì)內(nèi)容,更多關(guān)于PyQt5 Pandas表格讀取與處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python?jieba庫文本處理詞性標(biāo)注和關(guān)鍵詞提取進(jìn)行文本情感分析
這篇文章主要為大家介紹了Python使用中文文本處理利器jieba庫中的詞性標(biāo)注和關(guān)鍵詞提取功能進(jìn)行文本情感分析實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
基于OpenCV與Python實(shí)現(xiàn)的身份證號(hào)碼識(shí)別案例詳解
身份證識(shí)別技術(shù)主要依賴于計(jì)算機(jī)視覺和圖像處理技術(shù),通過對身份證圖像進(jìn)行分析,提取關(guān)鍵信息(如身份證號(hào)碼、姓名等),這篇文章主要介紹了基于OpenCV與Python實(shí)現(xiàn)的身份證號(hào)碼識(shí)別的相關(guān)資料,需要的朋友可以參考下2026-01-01

