|
離下班還有五分鐘,QQ突然來消息: 我懷著激動,緊張,忐忑的心情解壓了一個名為“全國空氣質(zhì)量”神秘壓縮包!
2016年至今中國所有城市空氣質(zhì)量數(shù)據(jù)!
而我!要把這912個表格合并成一張表格?。?! 三個方案瞬間浮現(xiàn)在我眼前: 1、Ctrl C + Ctrl V——可以睡公司了; 2、Excel Power Query,估計等電腦卡崩了,還得用回方案一; 3、敲代碼!俗話說,沒有什么是一行代碼解決不了的,如果有,就再敲一行。 工欲善其事,必先利其器,我果斷祭出了兩件敲碼神器! Python是一種,嗯…總之很厲害的編程語言,它能夠做網(wǎng)站,做軟件,做網(wǎng)絡(luò)爬蟲,做數(shù)據(jù)分析,做人工智能,做游戲和完成老板布置的工作。 Jupyter Notebook 是一本可以寫代碼的…草稿本,你可以大膽地在上面隨意涂鴉。你可以寫Julia, Python, Erlang, R等(jupyter),當然還可以用來完成老板布置的工作。 神器在手,我立刻開始思考代碼。 首先,我把這個問題分解成四個小目標: 01 查找到工作表所在文件位置 02 提取表格 03 合并表格 04 導出 01 首先我們導入python的os模塊: import os os模塊: os 模塊提供了非常豐富的方法用來處理文件和目錄。 使用os模塊的walk方法輸出指定目錄的文件 for file in os.walk('H:/Document/神秘文件'): print(file) os.walk() 方法: os.walk() 方法用于通過在文件目錄樹中游走輸出在目錄中的文件名。 我使用for循環(huán)遍歷‘H:/Document/全國空氣質(zhì)量匯總’,這個文件目錄,得到一個(),這是“元組”(姑且理解為一個盛放東西的容器)。里面用兩個逗號分成三部分: 1)第一部分就是我輸入的文件夾目錄。 2)第二部分是個空列表,不去管它。 3)第三部分也是一個列表,里面是我要提取的每個工作表。 第一個小目標達成: 02 首先,我需要知道工作表的文件路徑,這很簡單!完整的路徑就是文件夾目錄+工作表名稱。 如圖—— 然后,我定義一個列表,嗯…這也是個容器,容納提取的912個文件。 l = [] 接著,我導入pandas包,用read_csv()方法來提取工作表。 Pandas包: 一款提取,清洗,處理數(shù)據(jù)的神器。 容器: Python中有四種容器,列表;元組;字典;集合。功能和用法不同。 Pandas.read_csv()方法: Pandas用來提取csv文件的方法。 最后,寫好循環(huán),把提取的文件裝進列表中。 別忘了設(shè)置一個計數(shù),用來運行時顯示進度。 第二個小目標達成: 03 這里我們用到了pandas的concat方法。 pandas.concat() pandas.concat()方法: 用于拼接多份數(shù)據(jù)的方法。 合并剛才列表‘l’中的所有工作表到data_result這個變量中。 第三個小目標達成: 04 同樣,解決問題的方法也來自于pandas這款神器。 pandas.DataFrame.to_csv()方法 pandas.DataFrame.to_csv()方法: 用于導出Dataframe數(shù)據(jù)為csv格式的方法。 類似的方法還有pandas.DataFrame.to_excel()等。 其實,pandas可以保存數(shù)據(jù)為許多種格式,這里我還是選擇了最常用的csv格式。 這里括號內(nèi)首先填寫保存的數(shù)據(jù)路徑和名稱,其次,別忘了設(shè)置index=0的參數(shù),否則數(shù)據(jù)會多出一列索引列。???聽不明白?動手試一試就明白了。 第四個小目標達成: 讓我們回顧一下代碼全貌:
代碼不長,一共20行。 其中用橙色框選出的是代碼核心部分,一共9行,這是實現(xiàn)工作表合并最基本的代碼。 主要的工作思路是找到工作表所在的文件夾,提取其中每個工作表,合并它們,然后導出數(shù)據(jù)。(四個小目標) 代碼雖少,復用性卻很強,以后碰到類似的工作任務(wù),我們只需要更改數(shù)據(jù)所在文件夾和導出數(shù)據(jù)的兩個路徑即可。 好了,運行代碼!
見證奇跡的時刻到了! 合并912個工作表僅僅只要150秒! 厲!不!厲!害! 然而,正當我準備下班的時候…老板又戳我了!
這就可以難倒我嗎?不存在的!是時候拿出真正的利器了!
防加班神器——Excel工作表合并工具 純python開發(fā),應(yīng)用場景包括單工作簿多工作表、多工作簿多工作表、多文件夾多工作簿的合并。并且可以處理同時含以上三種情況的綜合問題! 看圖!
敲一敲回車,從此遠離加班! import os os.system('shutdown-s -t 0') 友情提示:運行前請先保存好所有需要的文件 然后…我終于可以回家了! |
|
|
來自: 老張的菜地 > 《數(shù)據(jù)庫》