不會代碼,也能批量數(shù)據(jù)合并,使用Python開發(fā)一個圖形交互界面(python合并數(shù)據(jù)框)
作為一名數(shù)據(jù)分析師,日報,周報,月報是少不了的,經(jīng)常在整理周報或者月報的時候,需要將這周的數(shù)據(jù)或者該月的數(shù)據(jù)進行一個匯總,常規(guī)地做法是將每一天的數(shù)據(jù)進行重復地復制、粘貼。
顯然,上面的方式不可取,會加重我們數(shù)據(jù)整理工作,有沒有一種簡便的方法?僅需鼠標點一點,即可完成數(shù)據(jù)合并,本文介紹Python數(shù)據(jù)合并、圖形界面開發(fā)和Python打包,可解決上述問題。
示例工具:anconda3.7
本文講解內(nèi)容:圖形界面開發(fā),Python打包
適用范圍:使用交互式命令一鍵批量數(shù)據(jù)合并
Python數(shù)據(jù)合并
如下我們有個需求,就是將四個季度的銷售明細合并在一張表里,本文開發(fā)的小工具也是在解決數(shù)據(jù)批量數(shù)據(jù)合并的問題。
常規(guī)情況下,導入一個Excel數(shù)據(jù),使用pd.read_excel命令即可,如下我們導入了其中銷售明細第1季度的數(shù)據(jù)。
import pandas as pddf=pd.read_excel(r'D:系統(tǒng)桌面(勿刪)Desktop訂單銷售數(shù)據(jù)銷售明細第1季度.xlsx')df.head()
那么如何導入一個文件夾下所有的Excel數(shù)據(jù)呢?這里使用os.listdir()命令可以返回該文件夾下的文件目錄,返回結(jié)果如下。
import osnew_path=r'D:系統(tǒng)桌面(勿刪)Desktop訂單銷售數(shù)據(jù)'listdir=os.listdir(new_path)listdir
['銷售明細第1季度.xlsx', '銷售明細第2季度.xlsx', '銷售明細第3季度.xlsx', '銷售明細第4季度.xlsx']
這樣我們就有了一個思路,首先導入第一個Excel表,然后使用for循環(huán)遍歷文件目錄,使用pd.concat命令將同一個文件夾內(nèi)的多個Excel表進行合并。
import pandas as pdimport osnew_path=r'D:系統(tǒng)桌面(勿刪)Desktop訂單銷售數(shù)據(jù)'listdir=os.listdir(new_path)df=pd.read_excel(new_path '' listdir[0])#導入第一個數(shù)據(jù)表for filename in listdir[1:]: dfi=pd.read_excel(new_path '' filename) #導入除第一個數(shù)據(jù)表外其他數(shù)據(jù)表 df=pd.concat([df,dfi],sort=False) #數(shù)據(jù)縱向合并 df.to_excel(new_path '' '數(shù)據(jù)合并.xlsx',index=False)
如下即為表格批量合并后的結(jié)果。
我們將上面的代碼定義為一個combine函數(shù),只要每次導入path的文件夾路徑,即可將數(shù)據(jù)合并。
import pandas as pdimport osdef combine(path): new_path=path listdir=os.listdir(new_path) df=pd.read_excel(new_path '' listdir[0])#導入第一個數(shù)據(jù)表 for filename in listdir[1:]: dfi=pd.read_excel(new_path '' filename) #導入除第一個數(shù)據(jù)表外其他數(shù)據(jù)表 df=pd.concat([df,dfi],sort=False) #數(shù)據(jù)縱向合并 df.to_excel(new_path '' '數(shù)據(jù)合并.xlsx',index=False)
Python圖形界面開發(fā)
為了將代碼的運行過程增加交互式操作,這里使用PySimpleGUI庫開發(fā)一個圖形界面,其中,layout用于自定義窗口布局,window用于定義整體的窗口界面,while True: 循環(huán)運行,當滿足特定的"事件"時,則返回具體的"值",從而實現(xiàn)人機交互功能。
import PySimpleGUI as sg#自定義窗口布局,一共是兩行,第一行用于查找需要合并Excel的文件目錄,第二行點擊開始合并按鈕進行合并layout = [[sg.Text("請選擇Excel文件所在目錄:"),sg.Input(size=(25, 1), enable_events=True, key="文件路徑"),sg.FolderBrowse(button_text="瀏覽文件"),], [sg.Button('開始合并', enable_events=True, key="開始"),] ]window = sg.Window('批量數(shù)據(jù)合并:By大話數(shù)據(jù)分析', layout)#定義窗口while True: event, values = window.read() if event in (None,): break #關(guān)閉用戶界面 elif event == "開始": if values["文件路徑"]: print(values["文件路徑"]) sg.popup('數(shù)據(jù)合并已完畢!') else: sg.popup('請先輸入Excel文件所在的路徑!')window.close()
如下將人機交互功能開發(fā)完畢,點擊瀏覽文件,找到需要批量合并文件的文件夾目錄,點擊開始合并,即可輸出結(jié)果,其中,values["文件路徑"]輸入的是需要合并Excel數(shù)據(jù)的文件路徑,print打印出來的就是需要合并Excel數(shù)據(jù)的文件路徑。
至此,Python圖形界面開發(fā)完畢,之前定義了combine函數(shù),當滿足特定事件和值時,執(zhí)行combine(values["文件路徑"])命令,即可使用交互式命令,完成數(shù)據(jù)表合并。
import pandas as pdimport osdef combine(path): new_path=path listdir=os.listdir(new_path) df=pd.read_excel(new_path '' listdir[0])#導入第一個數(shù)據(jù)表 for filename in listdir[1:]: dfi=pd.read_excel(new_path '' filename) #導入除第一個數(shù)據(jù)表外其他數(shù)據(jù)表 df=pd.concat([df,dfi],sort=False) #數(shù)據(jù)縱向合并 df.to_excel(new_path '' '數(shù)據(jù)合并.xlsx',index=False)import PySimpleGUI as sg#自定義窗口布局,一共是兩行,第一行用于查找需要合并Excel的文件目錄,第二行點擊開始合并按鈕進行合并layout = [[sg.Text("請選擇Excel文件所在目錄:"),sg.Input(size=(25, 1), enable_events=True, key="文件路徑"),sg.FolderBrowse(button_text="瀏覽文件"),], [sg.Button('開始合并', enable_events=True, key="開始"),] ]window = sg.Window('批量數(shù)據(jù)合并:By大話數(shù)據(jù)分析', layout)#定義窗口while True: event, values = window.read() if event in (None,): break #關(guān)閉用戶界面 elif event == "開始": if values["文件路徑"]: combine(values["文件路徑"]) sg.popup('數(shù)據(jù)合并已完畢!') else: sg.popup('請先輸入Excel文件所在的路徑!')window.close()
Python程序打包
交互式的命令開發(fā)完畢,如何分享給別人使用?或者是別人的電腦上沒有安裝Python也能正常使用數(shù)據(jù)合并功能?這里給大家介紹Python程序打包,使用虛擬環(huán)境進行打包,在命令行輸入如下命令下載pipenv包。
#使用虛擬環(huán)境壓縮pip install pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple
使用快捷鍵Win R鍵,然后輸入CMD,輸入pipenv shell命令,進入虛擬環(huán)境,沒有虛擬環(huán)境的話會自動建立一個。
#Win R輸入CMD,進入虛擬環(huán)境,沒有虛擬環(huán)境的話會自動建立一個pipenv shell
由于Python打包會將電腦安裝的Python包全部打包,這里我們在虛擬環(huán)境中只安裝Python程序涉及的模塊,這樣會減少打包的體積,注意xlrd==1.2.0下載低版本的包,默認安裝的是高版本的,安裝高版本的包在程序使用中會報錯。
#只安裝Python程序涉及的模塊pip install pandas xlrd==1.2.0 id-validator PySimpleGUI pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
將帶有交互式命令的數(shù)據(jù)合并代碼導出為.py文件,在命令行輸入如下的打包命令,指定具體的路徑即可打包。
#進行打包pyinstaller -F -w C:Desktopcombine.py
稍等幾分鐘,在Python的工作目錄下看到一個dist文件,如果不知道自己的Python工作目錄,可使用os.getcwd()命令查看。
該dist文件包含一個combine.exe程序。
雙擊combine.exe程序,在圖形交互界面導入具體的文件路徑即可完成數(shù)據(jù)合并,如果你對這個批量數(shù)據(jù)合并的小工具感興趣,也想用于日常的批量表格數(shù)據(jù)合并,可以添加我后臺的聯(lián)系方式,免費獲取。
三年互聯(lián)網(wǎng)數(shù)據(jù)分析經(jīng)驗,擅長Excel、SQL、Python、PowerBI數(shù)據(jù)處理工具,數(shù)據(jù)可視化、商業(yè)數(shù)據(jù)分析技能,統(tǒng)計學、機器學習知識,持續(xù)創(chuàng)作數(shù)據(jù)分析內(nèi)容,點贊關(guān)注,不迷路~