Python進(jìn)階之Excel基本操作介紹
概述
在現(xiàn)實(shí)中,很多工作都需要與數(shù)據(jù)打交道,Excel 作為常用的數(shù)據(jù)處理工具,一直備受人們的青睞,而大部分人都是手動(dòng)操作 Excel,如果數(shù)據(jù)量較小且是一些簡(jiǎn)單的操作還好說,但如果數(shù)據(jù)量較大或是一些復(fù)雜的操作,工作量可想而知,因此,我們需要掌握一種簡(jiǎn)單、高效的方法來(lái)操作 Excel。
在數(shù)據(jù)處理方面,Python 一直扮演著重要的角色,對(duì)于 Excel 操作,它有著完整且成熟的第三方庫(kù),使用也較為簡(jiǎn)單。
Python 中常用 Excel 操作庫(kù)如下:
- xlrd: 從 Excel 中讀取數(shù)據(jù),支持 xls、xlsx。
- xlwt: 向 Excel 中寫入數(shù)據(jù),支持 xls。
- xlutils: 提供了一些 Excel 的實(shí)用操作,比如復(fù)制、拆分、過濾等,通常與 xlrd、xlwt 一起使用。
- XlsxWriter: 向 Excel 中寫入數(shù)據(jù),支持 xlsx。
- openpyxl : 用于讀寫 Excel,支持 xlsx。
寫入
我們向Excel 中寫入一些數(shù)據(jù)。
使用 xlwt
通過pip install xlwt 命令安裝。
import xlwt
# 創(chuàng)建工作簿 wb = xlwt.Workbook() # 創(chuàng)建表單 sh = wb.add_sheet('test') # 創(chuàng)建字體對(duì)象 font = xlwt.Font() # 字體加粗 font.bold = True alm = xlwt.Alignment() # 設(shè)置左對(duì)齊 alm.horz = 0x01 # 創(chuàng)建樣式對(duì)象 style1 = xlwt.XFStyle() style2 = xlwt.XFStyle() style1.font = font style2.alignment = alm # write 方法參數(shù)1:行,參數(shù)2:列,參數(shù)3:內(nèi)容 sh.write(0, 1, '姓名', style1) sh.write(0, 2, '年齡', style1) sh.write(1, 1, '張三') sh.write(1, 2, 50, style2) sh.write(2, 1, '李四') sh.write(2, 2, 30, style2) sh.write(3, 1, '王五') sh.write(3, 2, 40, style2) sh.write(4, 1, '趙六') sh.write(4, 2, 60, style2) sh.write(5, 0, '平均年齡', style1) # 保存 wb.save('test.xls')
執(zhí)行結(jié)果:
使用 XlsxWriter
通過pip install XlsxWriter 命令安裝。
import xlsxwriter ???????# 創(chuàng)建工作簿 workbook = xlsxwriter.Workbook('test.xlsx') # 創(chuàng)建表單 sh = workbook.add_worksheet('test') fmt1 = workbook.add_format() fmt2 = workbook.add_format() # 字體加粗 fmt1.set_bold(True) # 設(shè)置左對(duì)齊 fmt2.set_align('left') # 數(shù)據(jù) data = [ ['', '姓名', '年齡'], ['', '張三', 50], ['', '李四', 30], ['', '王五', 40], ['', '趙六', 60], ['平均年齡', '', ] ] sh.write_row('A1', data[0], fmt1) sh.write_row('A2', data[1], fmt2) sh.write_row('A3', data[2], fmt2) sh.write_row('A4', data[3], fmt2) sh.write_row('A5', data[4], fmt2) sh.write_row('A6', data[5], fmt1) chart = workbook.add_chart({ 'type': 'line'}) workbook.close()
XlsxWriter 可以很方便的生成圖表。
import xlsxwriter ???????# 創(chuàng)建工作簿 wk = xlsxwriter.Workbook('test.xlsx') # 創(chuàng)建表單 sh = wk.add_worksheet('test') fmt1 = wk.add_format() fmt2 = wk.add_format() # 字體加粗 fmt1.set_bold(True) # 設(shè)置左對(duì)齊 fmt2.set_align('left') # 數(shù)據(jù) data = [ ['', '姓名', '年齡'], ['', '張三', 50], ['', '李四', 30], ['', '王五', 40], ['', '趙六', 60], ['平均年齡', '', ] ] sh.write_row('A1', data[0], fmt1) sh.write_row('A2', data[1], fmt2) sh.write_row('A3', data[2], fmt2) sh.write_row('A4', data[3], fmt2) sh.write_row('A5', data[4], fmt2) sh.write_row('A6', data[5], fmt1) ''' area:面積圖 bar:直方圖 column:柱狀圖 line:折線圖 pie:餅圖 doughnut:環(huán)形圖 radar:雷達(dá)圖 ''' chart = wk.add_chart({ 'type': 'line'}) # 創(chuàng)建圖表 chart.add_series( { 'name':'=test!$B$1', 'categories':'=test!$B$2:$B$5', 'values': '=test!$C$2:$C$5' } ) chart.set_title({ 'name':'用戶年齡折線圖'}) chart.set_x_axis({ 'name':'姓名'}) chart.set_y_axis({ 'name':'年齡'}) sh.insert_chart('A9', chart) wk.close()
讀取
我們使用 xlrd 讀取之前寫入的數(shù)據(jù),使用 pip install xlrd 命令安裝。
import xlrd # 打開 wb = xlrd.open_workbook('test.xlsx') print( 'sheet名稱:', wb.sheet_names()) print( 'sheet數(shù)量:', wb.nsheets) # 根據(jù) sheet 索引獲取 sheet sh = wb.sheet_by_index(0) # 根據(jù) sheet 名稱獲取 sheet # sh = wb.sheet_by_name('test') print( u'sheet %s 有 %d 行' % (sh.name, sh.nrows)) print( u'sheet %s 有 %d 列' % (sh.name, sh.ncols)) print('第二行內(nèi)容:', sh.row_values(1)) print('第三列內(nèi)容:', sh.col_values(2)) print('第二行第三列的值為:', sh.cell_value(1, 2)) print('第二行第三列值的類型為:', type(sh.cell_value(1, 2)))
修改
之前寫入的數(shù)據(jù)還有一個(gè)平均年齡是空著的,我們先讀取之前寫入的數(shù)據(jù),再計(jì)算出平均值,最后將平均值寫入。這里要用到 xlutils 模塊,使用 pip install xlutils 安裝。
import xlrd, xlwt from xlutils.copy import copy def avg(list): sumv = 0 for i in range(len(list)): sumv += list[i] return int(sumv / len(list)) # formatting_info 為 True 表示保留原格式 wb = xlrd.open_workbook('test.xls', formatting_info=True) # 復(fù)制 wbc = copy(wb) sh = wb.sheet_by_index(0) age_list = sh.col_values(2) age_list = age_list[1:len(age_list)-1] avg_age = avg(age_list) sh = wbc.get_sheet(0) # 設(shè)置左對(duì)齊 alm = xlwt.Alignment() alm.horz = 0x01 style = xlwt.XFStyle() style.alignment = alm sh.write(5, 2, avg_age, style) wbc.save('test.xls')
以上就是Python進(jìn)階之Excel基本操作介紹的詳細(xì)內(nèi)容,更多關(guān)于Python Excel基本操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python正則表達(dá)式之對(duì)號(hào)入座篇
正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過濾邏輯2018-07-07pycharm配置anaconda環(huán)境時(shí)找不到python.exe解決辦法
今天來(lái)說一下python中一個(gè)管理包很好用的工具anaconda,可以輕松實(shí)現(xiàn)python中各種包的管理,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時(shí)找不到python.exe的解決辦法,需要的朋友可以參考下2023-10-10Django集成Redis數(shù)據(jù)庫(kù)的操作指南
本文將詳細(xì)介紹如何在 Django 項(xiàng)目中集成 Redis 數(shù)據(jù)庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03Python實(shí)現(xiàn)剪刀石頭布小游戲(與電腦對(duì)戰(zhàn))
這篇文章給大家分享Python基礎(chǔ)實(shí)現(xiàn)與電腦對(duì)戰(zhàn)的剪刀石頭布小游戲,練習(xí)if while輸入和輸出,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-12-12Python?中給請(qǐng)求設(shè)置用戶代理?User-Agent的方法
本文介紹?HTTP?標(biāo)頭用戶代理主題以及如何使用?Python?中的請(qǐng)求設(shè)置用戶代理,您將了解?HTTP?標(biāo)頭及其在理解用戶代理、獲取用戶代理以及學(xué)習(xí)使用?Python?中的請(qǐng)求設(shè)置用戶代理的多種方法方面的重要性,感興趣的朋友跟隨小編一起看看吧2023-06-06