​用 Python 讓 Excel 表格合併飛起來

2021-02-20 Python數據之道
問題提出

我們在工作中經常會遇到如下情況,從不同部門或者不同單位收集到若干個表格,每個表格的內容相同(列內容一致),需要將他們匯總到同一個表格中。Python 作為數據分析的神器,只需要簡單行代碼就可以讓表格合併飛起來,並且代碼可以多次復用。

解法1用 Python 循環進行自動合併

閒話少說,直接上代碼了。

import pandas as pd
import time

filelist = ['c:/python/aSourseFiles/bi/bi (' + str(i+1) + ').xlsx' for i in range(40)]  #需要打開的文件列表,如果要自己運行代碼,找一個excel複製40遍再重命名就行了。

start = time.time() #用於計時。

df = pd.read_excel(filelist[-1])    #以最後一個文件為基礎進行合併操作
for i in range(39):     #將其餘39個文件與最後一個合併
    df = pd.concat([df, pd.read_excel(filelist[i])])
    print(i)

end = time.time()
run_time = end - start
print('本次運行耗時%.02f' %(run_time))

運行結果如下:

PS:我們的 Excel 表一般是附帶表頭的,合併的時候是從某行開始,例如,我們需要從第二行開始時,只需改為 pd.read_excel(filelist[i])[1:] ,注意 0 才是第一行, 1 是第二行。

這個操作優點是簡單易懂,學幾天 Python 就可以搞的定( Python 上手確實太太太容易了),適用於表格行數比較少的情況;缺點是比較耗時,如果行數比較多(比如我使用的是 5W 行),上個廁所回來還沒運行完。

解法2Python多進程操作

歲月雖漫長,但也耐不住時光如梭,多快好省才是硬道理。

程序要做的是兩件事兒:(1)打開文件;(2)將打開的文件合併在一起。我們先運行一小段代碼測試下這兩個功能各自的時耗。

import time
import pandas as pd

start = time.time()

df1 = pd.read_excel(r'c:/python/aSourseFiles/bi/bi (1).xlsx')
df2 = pd.read_excel(r'c:/python/aSourseFiles/bi/bi (2).xlsx')
df3 = pd.read_excel(r'c:/python/aSourseFiles/bi/bi (3).xlsx')

median = time.time()

df = pd.concat([df1, df2, df3]) 

end = time.time()
use1 = median - start     #計算打開文件耗時
use2 = end - median    #計算合併表格耗時

print(use1)
print(use2)

運行結果如下:

分析發現,時間主要浪費在打開文件上了,因此用多進程一次多打開幾個,理論上來說是可以節省時間的,說幹就幹:

import pandas as pd
import time
from multiprocessing import Pool

filelist = ['c:/python/aSourseFiles/bi/bi (' + str(i+1) + ').xlsx' for i in range(40)]

def read_excel(path):
    temp =  pd.read_excel(path)
    print('running')
    return temp

def merge_excel(temp):
    global df
    df = pd.concat([df, temp])
            
if __name__ == '__main__':

    start = time.time()

    df = pd.read_excel(filelist[-1])    #以最後一個文件為基礎進行合併操作
    p1 = Pool(8)   #生成8個進程
    for i in range(39):
        p1.apply_async(read_excel, args=(filelist[i],), callback=merge_excel)   #將打開文件的任務放入到進程中,完成任務時回調merge_excel進行合併   
    p1.close()
    p1.join()
    print(df.shape)

    end = time.time()
    run_time = end - start
    print('本次運行耗時%.02f' %(run_time))

運行結果如下:

果然是比之前快了些,上個廁所回來就可以拿到結果了。

拓展

這段代碼依舊是有點雞肋。40 個excel,每個 5W 行,合計 200W 行,合併完再放進 Excel 中就不大現實了。這個時候,我們可以通過把數據放入到資料庫中進行解決,有興趣的小夥伴可以自己嘗試下。

本文來自公眾號讀者投稿,歡迎各位童鞋向公號投稿,點擊下面圖片了解詳情!


相關焦點

  • Python讀寫Excel表格,就是這麼簡單粗暴又好用
    最近在做一些數據處理和計算的工作,因為數據是以.csv格式保存的,因此剛開始直接用Excel來處理。但是做著做著發現重複的勞動其實並沒有多大的意義,於是就想著寫個小工具幫著處理。以前正好在一本書上看到過使用Python來處理Excel表格,可惜沒有仔細看。於是我到處查找資料,基本解決了日常所需,終於算是完成了任務,因此撰寫此文就算是總結吧,主要記錄使用過程的常見問題及解決。
  • Python對比VBA實現excel表格合併與拆分
    1.1.Python實現表格合併Python實現表格合併的本質是 遍歷全部表格數據,然後採用concat方法進行數據合併Pandas學習筆記02-數據合併。因此,在這裡我們主要用到兩個庫:os和pandas,其中os用於獲取文件夾下全部滿足要求的文件信息,pandas用於讀取表格數據並進行concat。
  • 史上最牛的Excel表格合併方法,瞬間合併12000個表格
    前言:匯總多個excel文件的所有工作表數據,是蘭色首次發布。網上很難搜到相關教程,所以同學們一定要轉發或收藏起來備用。
  • python中使用xlrd、xlwt操作excel表格詳解
    這篇文章主要介紹了python中使用xlrd、xlwt操作excel表格詳解,python操作excel主要用到xlrd和xlwt
  • 【極簡Python 自動化辦公】Python讀取Excel表格
    1.安裝Python讀excel模塊——xlrd2.準備表格內容3.編寫python代碼並運行4.一些特殊的格式處理1.安裝xlrd在python新安裝好時,是沒有安裝excel處理組件的,需要通過命令行安裝。在cmd窗口中輸入:pip install xlrd等待安裝完畢。
  • Python自動化辦公-讓 Excel 飛起來
    主要內容:Python 操作 Excel 的輪子Python 操作 Excel 的輪子有很多,導致選擇困難症,為了幫你做選擇,我這裡放個對比圖:從上面的表格中可以看出,xlwings 是唯一一個全部都支持️的,是 Python
  • 用ExcelPython在Excel中調用Python
    高度嵌入:似乎採用已經打包好的python函數,所以可以在不安裝python情況下表格程序可以擴展使用; 4. 對最終用戶高度透明:python由Excel VBA調用所以沒有不需要其他另外的中間程序插入,即使是表格程序已經升級了; 5.
  • Python幾行代碼輕鬆合併表格
    Python幾行代碼竟然可以輕鬆合併N個Excel表格?
  • 如何快速把多個excel表格合併成一個excel表
    如何快速把多個excel表格合併成一個excel表呢?
  • python操作Excel、Word、PDF大全
    python自動化辦公(python操作Excel、Word、PDF)的文章都很喜歡,並希望能夠應用到工作中去。目錄一:python操作excel 1、openpyxl庫介紹2、python怎麼打開及讀取表格內容?sheet.cell(row=, column=)方式3、python如何向excel中寫入某些內容?
  • 拆分表格、合併多個表格?用VBA只須幾秒鐘
    請諸位考友查收,一定不要忘了練習!!excel為我們提供了很多好用的功能和函數,但還是有很多工作無法用現有功能和函數批量完成,比如多個excel表格的合併與拆分。而藉助VBA語言編寫的宏代碼,這些看似無法批量處理或無法完成的事情,瞬間變得只是小菜一碟,也許你不懂VBA,也建議先收藏起來這些代碼備用。
  • 如何把多個相同格式的Excel表格數據快速的合併到一張表格中.
    收錄於話題 #excel
  • 合併再多表格,也只需3個 Excel 公式
    把同一個文件中的工作表合併到一個表中,99%的同學都只能粘粘粘。蘭色終於找到一個比較簡便的方法,而且是可以合併任意多個工作表。
  • 使用Power BI 合併多個excel表格
    總有些時候你會被逼著把分散在幾十個excel中,本可用金數據這種問卷服務商採集,的數據合到一張表裡。算了。生氣降智。就這樣吧。為什麼用Power BI?免費高度兼容各版本excel表格方便清洗後導出到R或python環境好看免費沒有7首先需要使用Windows系統,xp和server2003不要想。Mac用戶建議先學習下BootCamp或虛擬機安裝windows。請使用正版軟體,再不濟某寶入個激活碼。
  • 比Excel公式快10倍,史上最牛合併表格工具來了!!
    一個excel文件中有兩個Excel表格,現需要根據姓名列合併成一個表格
  • 兩個Excel表格合併,最有水平的處理方法
    也不經常留言、點「在看」,平臺會認為你不喜歡高頓君,高頓君也會慢慢消失在你的訂閱列表裡高頓君一直在兢兢業業且積極的為大家準備各類財會新政、乾貨、實操文等,也希望能夠持續為大家帶來快速實時有效的消息,所以請大家一定「星標」高頓財稅學院(拉至文末可看星標步驟),或者多多給我們評論、轉發、點「在看」呀~有2個Excel
  • 【Python基礎】python使用openpyxl操作excel
    1、openpyxl庫介紹openpyxl最好用的python操作excel表格庫,不接受反駁;openpyxl只支持【.xlsx / .xlsm / .xltx / .xltm】格式的文件;2、python怎麼打開及讀取表格內容?1)Excel表格述語這裡需要大家仔細查看圖中的每一項內容,知道什麼是「行(row)、列(column)」?
  • 如何使用python提取pdf表格及文本,並保存到excel
    這次介紹一個開源python工具庫-pdfplumber,可以方便地獲取pdf的各種信息,包括文本、表格、圖表、尺寸等。pdfplumber在github上有英文官方文檔,後面我們會撿重點講解,先看下如何用pdfplumber提取pdf表格?
  • 不用加班做,多個Excel表格合併 有簡單方法了!!!
    除非用VBA編程,於是蘭色用了兩天時間做了一個報表合併工具。除了給朋友交工外,也分享給有需要求同學們。使用方法演示:1、打開Excel報表合併工具.xlsm(下載地址百度網盤:https://pan.baidu.com/s/1ikiRePnNNGdnV-lpT9o5Eg,打開表格時如果有安全提示,請點擊啟用按鈕,絕對安全),點擊表格中的按鈕會打開彈出合併窗口的主界面。
  • 多個excel表格匯總到一個表格的軟體
    我們經常會遇到要將格式相同的多個excel表格匯總到一個表格的情況,一般都是採用複製粘貼的方法,如果表格不多的情況下,處理起來也挺方便