Python 進階(五): Excel 基本操作

目錄
  • 1. 概述
  • 2. 寫入
    • 2.1 使用 xlwt
    • 2.2 使用 XlsxWriter
  • 3. 讀取
  • 4. 修改

1. 概述

在現實中,很多工作都需要與數據打交道,Excel 作為常用的數據處理工具,一直備受人們的青睞,而大部分人都是手動操作 Excel,如果數據量較小且是一些簡單的操作還好說,但如果數據量較大或是一些復雜的操作,工作量可想而知,因此,我們需要掌握一種簡單、高效的方法來操作 Excel。

在數據處理方面,Python 一直扮演著重要的角色,對于 Excel 操作,它有著完整且成熟的第三方庫,使用也較為簡單。

Python 中常用 Excel 操作庫如下:

  • xlrd:從 Excel 中讀取數據,支持 xls、xlsx。

  • xlwt:向 Excel 中寫入數據,支持 xls。

  • xlutils:提供了一些 Excel 的實用操作,比如復制、拆分、過濾等,通常與 xlrd、xlwt 一起使用。

  • XlsxWriter:向 Excel 中寫入數據,支持 xlsx。

  • openpyxl :用于讀寫 Excel,支持 xlsx。

2. 寫入

我們向 Excel 中寫入一些數據。

2.1 使用 xlwt

通過 pip install xlwt 命令安裝。

import xlwt# 創建工作簿
wb = xlwt.Workbook()
# 創建表單
sh = wb.add_sheet('test')
# 創建字體對象
font = xlwt.Font()
# 字體加粗
font.bold = True
alm = xlwt.Alignment()
# 設置左對齊
alm.horz = 0x01
# 創建樣式對象
style1 = xlwt.XFStyle()
style2 = xlwt.XFStyle()
style1.font = font
style2.alignment = alm
# write 方法參數1:行,參數2:列,參數3:內容
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')

執行結果:

2.2 使用 XlsxWriter

通過 pip install XlsxWriter 命令安裝。

import xlsxwriter# 創建工作簿
workbook = xlsxwriter.Workbook('test.xlsx')
# 創建表單
sh = workbook.add_worksheet('test')
fmt1 = workbook.add_format()
fmt2 = workbook.add_format()
# 字體加粗
fmt1.set_bold(True)
# 設置左對齊
fmt2.set_align('left')
# 數據
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# 創建工作簿
wk = xlsxwriter.Workbook('test.xlsx')
# 創建表單
sh = wk.add_worksheet('test')
fmt1 = wk.add_format()
fmt2 = wk.add_format()
# 字體加粗
fmt1.set_bold(True)
# 設置左對齊
fmt2.set_align('left')
# 數據
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:環形圖
radar:雷達圖
'''
chart = wk.add_chart({'type': 'line'})
# 創建圖表
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()

執行結果:

3. 讀取

我們使用 xlrd 讀取之前寫入的數據,使用 pip install xlrd 命令安裝。

import xlrd# 打開
wb = xlrd.open_workbook('test.xlsx')
print( 'sheet名稱:', wb.sheet_names())
print( 'sheet數量:', wb.nsheets)
# 根據 sheet 索引獲取 sheet
sh = wb.sheet_by_index(0)
# 根據 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('第二行內容:', sh.row_values(1))
print('第三列內容:', sh.col_values(2))
print('第二行第三列的值為:', sh.cell_value(1, 2))
print('第二行第三列值的類型為:', type(sh.cell_value(1, 2)))

4. 修改

之前寫入的數據還有一個平均年齡是空著的,我們先讀取之前寫入的數據,再計算出平均值,最后將平均值寫入。這里要用到 xlutils 模塊,使用 pip install xlutils 安裝。

import xlrd, xlwt
from xlutils.copy import copydef avg(list):sumv = 0for 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)
# 復制
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)
# 設置左對齊
alm = xlwt.Alignment()
alm.horz = 0x01
style = xlwt.XFStyle()
style.alignment = alm
sh.write(5, 2, avg_age, style)
wbc.save('test.xls')

執行結果:


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/915443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

32、鴻蒙Harmony Next開發:使用動畫-動畫概述

???屬性動畫轉場動畫粒子動畫組件動畫動畫曲線動畫銜接動畫效果幀動畫(ohos.animator) UI(用戶界面)中包含開發者與設備進行交互時所看到的各種組件(如時間、壁紙等)。屬性作為接口,用于控制…

【STM32】485接口原理

485 通信實驗 這篇文章是對 RS485通信 的原理、硬件連接、接口芯片(SP3485)、總線結構等都有詳盡的說明。我們在此處進行清晰有條理的講解整理,便于學習和實驗操作。 在了解485接口通信原理之前,我們先復習一下串口:串…

亞馬遜二審攻防全攻略:預防、應對與長效合規之道

當店鋪收到二審通知,不少賣家會陷入焦慮與慌亂,只要掌握科學的預防策略與應對方法,不僅能降低二審風險,即便遭遇審核也能順利突圍。一、未雨綢繆:預防二審的四大核心策略夯實資料真實性根基資料的真實性與一致性是亞馬…

添加狀態信息

1首先在數據字典里加入可借閱和不可借閱狀態2導入數據字典export default {name: "Book",dicts: [book_borrow_status],//導入數據字典data() {return {formData: {name: null,author: null,num: null,price: null,typeId: null,status:null//新加狀態屬性},3設置狀態…

234、回文鏈表

題目:解答:對143稍作修改即可,判斷兩個指針指向的是否一直相等。終止條件為不等或者head2nullptrclass Solution { public:ListNode *rev(ListNode *head){ListNode *cur head;ListNode *pre nullptr;while(cur){ListNode * nxt cur->n…

第15次:商品搜索

實現用戶在頁面可自由搜索某個商品的功能。 第1步:準備搜索功能用到的庫 pip install whoosh pip install jieba pip install django-haystackwhoosh是搜索引擎,對英文支持較好,但對中文效果不佳。jieba為中文分詞庫,彌補whoosh…

《使用Qt Quick從零構建AI螺絲瑕疵檢測系統》——0. 博客系列大綱

目錄【《使用Qt Quick從零構建AI螺絲瑕疵檢測系統》系列簡介】第一部分:基礎入門與項目啟航第二部分:核心視覺算法開發第三部分:模擬完整工業流程第四部分:軟件打包與高級特性【《使用Qt Quick從零構建AI螺絲瑕疵檢測系統》系列簡…

【Python】Python中的循環語句

循環語句導讀一、基本概念1.1 循環語句的執行流程1.2 循環語句的分類二、while語句三、for語句四、break與continue五、死循環六、循環中的else語句七、range()函數結語導讀 大家好,很高興又和大家見面啦!!! 在上一篇內容中我們…

docker|Linux|以centos基礎鏡像為基礎制作nmap專用鏡像(鏡像瘦身計劃)

一、 最近由于某些場景下需要使用nmap,而nmap的rpm安裝包在源目標機器上使用有軟件沖突,因此,計劃使用docker部署nmap 具體計劃為 1、使用centos的基礎鏡像,在有網環境下,通過配置阿里云的yum倉庫,在cen…

基于單片機公交車報站系統/報站器

傳送門 👉👉👉👉其他作品題目速選一覽表 👉👉👉👉其他作品題目功能速覽??????? 概述 公交車自動報站系統利用單片機作為核心控制器,結合GPS/北斗定位模塊、語音存…

Oracle 體系結構學習

1 認識Oracle后臺進程Oracle數據庫后臺進程是Oracle數據庫管理系統(DBMS)的核心組件,它們在后臺運行,負責數據庫的各種管理和維護任務。主要包括以下幾種:SMON (System Monitor)SMON負責數據庫的恢復操作,如…

構建一種安全的老式測試儀,用于具有限流燈泡,模擬儀表和可變輸出的交流設備

這個復古電路和電源測試儀的想法來自我需要一個簡單,安全,時尚的工具來測試和控制工作臺上的線路供電設備。商業解決方案要么太笨重,太昂貴,要么缺乏我喜歡的觸覺和模擬魅力。所以我決定自己造一個。這個測試儀的核心是一個老式的…

Redis5:Redis的Java客戶端——Jedis與SpringDataRedis詳解

目錄 1、Jedis客戶端 1.1使用過程 2、SpringDataRedis 2.1 SpingDataRedis介紹 2.2SpringDataRedis快速入門 2.3RedisTemplate的RedisSerializer 2.3.1RedisTemplate中JDK序列化局限性 2.3.2方式一:改變RedisTemplate的序列化方式 2.3.3RedisTemplate存儲一…

零基礎 “入坑” Java--- 十三、再談類和接口

文章目錄一、Object類1.獲取對象信息2.對象比較:equals方法二、再談接口1.比較相關接口2.Cloneable接口和深拷貝三、內部類1.匿名內部類2.實例內部類3.靜態內部類4.局部內部類在之前的學習中,我們已經了解了有關類以及接口的知識,在本章節中&…

Spring Boot 一個注解搞定「加密 + 解密 + 簽名 + 驗簽」

Spring Boot 一個注解搞定「加密 解密 簽名 驗簽」本文基于 Spring Boot 3.x,通過一個自定義注解 AOP,一行注解即可給任何 Controller 方法加上 請求解密 → 驗簽 → 響應加密 → 加簽 的完整鏈路,并可直接拷貝到生產環境使用。一、最終效…

《計算機網絡》實驗報告二 IP協議分析

目 錄 1、實驗目的 2、實驗環境 3、實驗內容 3.1 tcpdump 基本用法 3.2 wireshark基本用法 3.3 利用tcpdump抓包,wireshark分析包 4、實驗結果與分析 4.1 tcpdump命令的基本用法 4.2 wireshark的基本用法 4.3 利用tcpdump抓包,wireshark分析包…

k8s學習記錄(三):Pod基礎-Node選擇

一、前言 在上一篇文章中我們學習了Pod的一些基本的知識,今天我們將繼續學習Pod。 二、K8S如何選擇節點來運行Pod 我們知道在一個K8S集群中,會有多個工作節點(Worker Node),那么k8s會選擇那個node呢?接下…

3天功能開發→3小時:通義靈碼2.0+DEEPSEEK實測報告,單元測試生成準確率92%的秘密

活動鏈接:https://developer.aliyun.com/topic/lingma-aideveloper?spma2c6h.29979852.J_9593490300.2.49b8110eeymlF8 前言 隨著人工智能技術的迅猛發展,AI 賦能編程成為了必然趨勢。通義靈碼應運而生,它是阿里巴巴集團在人工智能與編程領…

【小沐學GIS】基于Rust繪制三維數字地球Earth(Rust、OpenGL、GIS)

🍺三維數字地球GIS系列相關文章如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第二期3【小沐學GI…

ARM 學習筆記(三)

參考文獻:《ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition》《ARM Cortex-A (ARMv7-A) Series Programmer’s Guide》1、內存類型 ARMv7-A 處理器中,將 Memory 定義為幾種類型(Memory Type): Strong…