用Python讓Excel飛起來——基本操作(二)

2021-12-09 小暉程序

上一篇文章我們實現了通過xlrd,xlwt和xlutils對Excel的讀取和寫入,並進行修改。但是xlrd等模塊還存在一定的問題:僅僅支持對舊格式的.xls文件進行讀寫,而且無法修改原始Excel等等。因此我們這次使用openpyxl和pandas庫來對Excel進行操作。

下面我們首先來看一下如何用openpyxl包來讀寫Excel,首先我們需要導入openpyxl包(如果沒有安裝的話,可以使用pip install openpyxl來安裝)

總體上的讀取方法與xlrd類似,不過API更加簡單明了。讀取Excel之前,我們需要先調用load_workbook方法來加載Excel。通過get_sheet_by_name()方法獲取相應的sheet,或者通過get_active_sheet()方法獲取當前活動的sheet。這裡有一個要注意的地方,就是openpyxl的行列都是從1開始的,不像通常從0開始,因此在讀取單元格的時候要+1,其餘的部分就和xlrd類似了,代碼如下:

import openpyxl
def read_excel(fileName='D:/Book1.xlsx'): wb = openpyxl.load_workbook(fileName) sheet = wb.get_sheet_by_name('Sheet1') nrows = sheet.max_row ncols = sheet.max_column for i in range(nrows): for j in range(ncols): print(sheet.cell(i+1,j+1).value, end=' ') print() read_excel()

讀取結果如下圖所示:

計算平均分的方法與前文類似

## 計算個人平均分def get_average(fileName='D://Book1.xlsx'):    avg_dict = {}    wb = openpyxl.load_workbook(fileName)    sheet = wb.get_sheet_by_name('Sheet1')    nrows = sheet.max_row    ncols = sheet.max_column    for row in range(1,nrows):        avg = 0.0        for col in range(1,ncols):            avg += float(sheet.cell(row+1, col+1).value) ## 計算每一個學生的總分        avg /= (ncols-1) ## 總分除以課程數即是平均分        avg_dict[sheet.cell(row+1, 1).value] = avg ## 每行的第一列是學生姓名,用作字典的鍵,平均分作為值    print(avg_dict)    return avg_dict
avg_dict = get_average()

這裡,我們先將平均分寫入到一個新建的Excel工作表中,實現與上一篇文章類似的功能。新建Excel需要先通過openpyxl.Workbook()方法來獲取一個新的Excel文檔,通過active屬性得到可訪問的工作表sheet。接下來只要在表格中填入數據即可,需要注意的是序列號是從1開始的。

## 將字典寫入到Excel中def write_excel(value_dict, resultName='D://Book2.xlsx'):    wb = openpyxl.Workbook()    sheet = wb.active    #sheet = wb.create_sheet()    ## 先在標題欄加入「姓名」和「平均分」列    sheet.cell(1,1).value = '姓名'    sheet.cell(1,2).value = '平均分'    ## 遍歷字典,寫入姓名和平均分    row = 2    for key in value_dict.keys():        sheet.cell(row,1).value = key        sheet.cell(row,2).value = value_dict[key]        row+=1    wb.save(resultName)    write_excel(avg_dict)

以上做法我們是將結果存入到新建的Excel的,如我們想要直接更新原始的Excel,用xlwt是無法做到的,但是openpyxl可以比較方便的實現此功能。我們在創建一個Excel文檔並獲取到sheet後,在表格的第一行和的最後一列之後添加一個新列,標題是「平均分」,然後遍歷每一行,將每一行的第二列的值(也就是學生姓名)與字典表的鍵進行對應,若與鍵相同,則將值作為平均分,並寫入到這一行的最後一列中。

## 修改原有的Exceldef update_excel(value_dict, fileName='D://Book3.xlsx'):    wb = openpyxl.load_workbook(fileName)    sheet = wb.get_sheet_by_name('Sheet1')     nrows = sheet.max_row    ncols = sheet.max_column    sheet.cell(1, ncols+1).value = '平均分' ## 在標題欄上添加一列平均分    ## 遍歷每一行,得到學生姓名,根據姓名在字典中查詢到平均分,並寫入到Excel中,實現更新Excel    for i in range(1,nrows):        for key in value_dict.keys():            name = sheet.cell(i+1,1).value            if name==key:                sheet.cell(i+1, ncols+1).value = value_dict[key]    wb.save(fileName)
update_excel(avg_dict)

更新後,效果如圖。

接下來,我們看看用pandas如何讀寫Excel,其實用pandas操作Excel數據是最方便的,pandas讀取Excel成一個DataFrame,然後就可以使用pandas的函數對數據進行各種處理了。

導入pandas後,讀取一個Excel只需要一行代碼:

import pandas as pd
## 讀取Exceldf = pd.read_excel('D://Book1.xlsx', sheet_name='Sheet1')

在jupyter中可以看到輸出結果:

同樣的,計算平均分也非常簡單,也是只有一行代碼:

df["平均分"] = df.mean(axis=1) 

這裡其實就是對每一行求平均值,pandas會自動對數字型求和,行中有字符型數據也不會報錯。

可以看到平均分已經計算出來了,並修改了Excel。

將修改後的結果出入到Excel依然只需要一行代碼:

df.to_excel("D:/Book4.xlsx", index=False) 

可以看到數據已經被寫入到新的Excel中。

pandas確實是最方便的工具包,之前我們用xlrd,xlwt和openpyxl寫了很多行代碼的功能,在pandas中三句話就搞定了,效率之高的確值得肯定。

下一篇文章,我會研究一下怎麼使用一些Python工具包對Excel表格調整格式。

相關焦點

  • 用Python實現excel 14個常用操作
    用excel的話首先確認訂單明細號是唯一值,然後在df1新增一列寫:=vlookup(a2,df2!a:h,6,0) ,然後往下拉就ok了。(剩下13個我就不寫excel啦)那用python是如何實現的呢?#查看訂單明細號是否重複,結果是沒。
  • python+xlrd+xlwt操作excel
    報名微信長按下方二維碼課程介紹長按下方二維碼介紹xlrd(讀操作),xlwt(寫操作)上述軟體下載後,分別解壓,之後在cmd命令下分別進入對應的目錄中運行python setup.py install如果運行過程中提示缺少setuptools,
  • 用Python完成Excel的基本工作
    點點說在前面:本期文章是來自用戶畫像產品運營實戰Pointer,同時現任top大廠廣告數據分析師的須臾,
  • 詳解Python操作Excel文件
    前言本篇文章主要總結了一下利用python操作Excel文件的第三方庫和方法。常見庫簡介1.xlrdxlrd是一個從Excel文件讀取數據和格式化信息的庫,支持.xls以及.xlsx文件。支持Excel操作。4.xlwingsxlwings是一個可以實現從Excel調用Python,也可在python中調用Excel的庫。
  • 文職美女上班手動用Excel表格太麻煩,當學會python後easy操作
    通過程序操作excel表格是編程中比較常見的操作,python本身不能直接操作excel,需要安裝第三方的模塊來實現excel的操作。Python中可以操作excel模塊主要有:1、xlrd 模塊實現exlcel表格讀取2、xlwd 模塊實現excel表格創建和寫入3、pandas模塊也可以實現excel常規操作
  • python操作excel:批量生成超連結
    excel設置超連結的函數是HYPERLINK,這裡用python批量生成超連結的思想其實很簡單,就是將公式寫入excel就行。
  • 巧用python win32com模塊操作excel文件
    Python操作excel文件的第三方庫有很多,小爬就常用openPyxl庫來操作已有的excel文件,它對xlsx、xlsm等格式的支持都較好
  • 14-用Python 讀寫 Excel 文件
    二、支持大文件寫入如果數據量非常大,可以啟用constant memory模式,這是一種順序寫入模式,得到一行數據就立刻寫入一行,而不會把所有的數據都保持在內存中。2.缺點一、不支持讀取和修改作者並沒有打算做一個XlsxReader來提供讀取操作。不能讀取,也就無從修改了。
  • 「Python替代Excel Vba」系列(二):pandas分組統計與操作Excel
    帶你用pandas玩轉各種數據處理前言在本系列的上一章已經介紹了如何讀寫 excel 數據,並快速進行匯總處理。但有些小夥伴看完之後有些疑惑:那只是簡單讀寫數據而已,有時候需要設置 excel 的格式。
  • Python讓excel飛起來—xlwings
    綜合易用性、通用性、讀寫性能等方面對比,我們推薦使用xlwings,xlwings有如下優點:語法接近 VBA可以用 Python 代碼取代 VBA 編寫宏在 windows 可以用 Python 編寫 Excel 用戶自定義函數全功能支持 Numpy Pandas matplotlib 等科學計算庫支持 Windows 和 MacOS
  • 利用python操作Excel教程
    很多人都會使用excel來對數據做處理,但隨著python的日益強盛,不甘落後的我們也可以用python來完成這些工作,該教程目的是教會您用Python腳本來對excel做處理。案例一:以下是創建Pandas數據框並使用該to_excel() 方法將該數據寫入Excel文件的簡單示例 :結果顯示:
  • Python「文件操作」Excel篇(上)
    大家好,我們今天來一起探索一下用Python怎麼操作Excel文件。與word文件的操作庫python-docx類似,Python也有專門的庫為Excel文件的操作提供支持,這些庫包括xlrd、xlwt、xlutils、openpyxl、xlsxwriter幾種,其中我最喜歡用的是openpyxl,這也是本次講解的主要內容。Excel文件大家也不陌生了,平時辦公、學習中都會用到,大家回憶一下,你操作一個Excel文件是什麼步驟呢?
  • 未明學院:用excel不好嗎?為什麼還要學python?
    在大數據背景的今天,面對千萬條以上動輒成百上千G的數據,單用excel難免顯得力不從心,越來越多的人將關注點轉向python。1、易踩坑!而python在數據處理的量級和性能上明顯高於excel,對python來說,只需調用drop_duplicates方法就可以輕鬆處理大批量數據,無需擔心軟體崩潰異常退出。
  • Python讀寫Excel表格,就是這麼簡單粗暴又好用
    最近在做一些數據處理和計算的工作,因為數據是以.csv格式保存的,因此剛開始直接用Excel來處理。但是做著做著發現重複的勞動其實並沒有多大的意義,於是就想著寫個小工具幫著處理。以前正好在一本書上看到過使用Python來處理Excel表格,可惜沒有仔細看。於是我到處查找資料,基本解決了日常所需,終於算是完成了任務,因此撰寫此文就算是總結吧,主要記錄使用過程的常見問題及解決。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • n種方式教你用Python讀寫Excel等數據文件
    內存不夠時使用,一般不太用readlines()   :一次性讀取整個文件內容,並按行返回到list,方便我們遍歷2. 內置模塊csvpython內置了csv模塊用於讀寫csv文件,csv是一種逗號分隔符文件,是數據科學中最常見的數據存儲格式之一。csv模塊能輕鬆完成各種體量數據的讀寫操作,當然大數據量需要代碼層面的優化。
  • 對比excel,用python實現逆透視操作(寬表變長表)
    綜合群友們的智慧,今天我們就來看看excel與python如何實現這個需求吧!註:本文演示的數據大家可以在「社科學術匯」後臺回復 20210928,文件夾領取。群聊目錄:1. excel逆透視技巧2.Pandas逆透視技巧excel做逆透視操作是需要用到Power Query。第一步:選中數據,然後在菜單欄-數據-點擊來自表格/區域
  • Python讀寫Excel表格,就是這麼簡單粗暴又好用(文末送書)
    來源 | 戀習Python(ID:sldata2017)最近在做一些數據處理和計算的工作,因為數據是以.csv格式保存的,因此剛開始直接用Excel來處理。但是做著做著發現重複的勞動其實並沒有多大的意義,於是就想著寫個小工具幫著處理。以前正好在一本書上看到過使用Python來處理Excel表格,可惜沒有仔細看。
  • Python操作Excel,將匯總數據分到不同sheet
    import pandas as pdinput_file = "F://python入門//數據2//appname_test.xlsx"output_file = "F://python入門//數據2//output.xlsx"data_frame = pd.read_excel(input_file,sheet_name='sum1'
  • 教你如何用Python輕輕鬆鬆操作Excel、Word、CSV,一文就夠了,趕緊碼住!!!
    修改 excel上面說了寫入和讀取 Excel 內容,接下來我們就說下更新修改 Excel 該如何操作,修改時就需要用到 xlutils 中的方法了。python-excel官網:www.python-excel.org/Python 操作 Word安裝 python-docx處理 Word 需要用到 python-docx 庫,目前版本為 0.8.10 ,執行如下安裝命令:$ pip install python-docx