Python3使用xlrd、xlwt處理Excel方法數(shù)據(jù)
說(shuō)在前頭
最近在做畢設(shè),題目是道路擁堵預(yù)測(cè)系統(tǒng),學(xué)長(zhǎng)建議我使用SVM算法進(jìn)行預(yù)測(cè),但是在此之前需要把Excel中的數(shù)據(jù)進(jìn)行二次處理,原始數(shù)據(jù)不滿足我的需要,可是。。有346469條數(shù)據(jù),不能每一條都自己進(jìn)行運(yùn)算并且將它進(jìn)行歸一化運(yùn)算??!

作為一個(gè)Java開(kāi)發(fā)者,Python的使用我是從來(lái)沒(méi)用過(guò)的啊,也是作死選了個(gè)這么難的題目。。后來(lái)在網(wǎng)上查閱發(fā)現(xiàn)xlrd可以通過(guò)Python代碼讀取Excel的文件,他的含義是xls文件的read(只讀),另外它的同類是xlwt(xls的write嘍~),這個(gè)是可以執(zhí)行寫(xiě)入操作的庫(kù)。那我們就開(kāi)始:

作為一名新手,Python的dalao千萬(wàn)別噴,我們抱著學(xué)習(xí)的心態(tài)一起來(lái)學(xué)習(xí)這兩個(gè)庫(kù)到底怎么使用吧!
一、xlrd的使用
篇幅太多,這篇只介紹xlrd的使用,xlwt下篇繼續(xù)哦~
想使用肯定先安裝,windows系統(tǒng)下如果你安裝了Python環(huán)境,直接打開(kāi)cmd鍵入:$ pip install xlrdxlwt 也是這樣安裝,說(shuō)實(shí)話Python這些個(gè)類庫(kù)真的是太方便了(題外話)
我們比如要修改這個(gè)Excel的數(shù)據(jù):

總共有兩層:

導(dǎo)入xlrd
import xlrd
讀取數(shù)據(jù)文件
workbook = xlrd.open_workbook(r'E:\test.xlsx')
打印Sheet信息
print(workbook.sheet_names())
打印結(jié)果:

根據(jù)下標(biāo)獲取表單
print(workbook.sheet_names()[1])
后面加個(gè)中括號(hào),里面是表單的位置,我輸入1,表示第二頁(yè),所以打?。?br />

根據(jù)索引或名稱獲取數(shù)據(jù)的名稱、行或列
index = workbook.sheet_by_index(0)# 根據(jù)索引或者行數(shù)列數(shù)和名稱
print('索引名稱:'+str(index.name)+' 索引的行數(shù)'+
str(index.nrows)+' 索引的列數(shù)'+str(index.ncols))
輸出結(jié)果:


確實(shí)是七行五列,沒(méi)毛病~

同樣根據(jù)表單的名稱也能拿到Sheet對(duì)象
index2 = workbook.sheet_by_name('Sheet1')
print('索引名稱:'+str(index2.name)+' 索引的行數(shù)'+
str(index2.nrows)+' 索引的列數(shù)'+str(index2.ncols))
輸出結(jié)果:

獲取整行整列的內(nèi)容
最重要的來(lái)了,怎么獲取一整行、一整列的內(nèi)容呢?
首先要拿到表單的對(duì)象,通過(guò)上面說(shuō)的兩種方法:
我習(xí)慣用名稱獲?。?/p>
sheet1= workbook.sheet_by_name('Sheet1')
獲取了以后:
row_values = sheet1.row_values(2)
print('第三行的內(nèi)容:'+str(row_values))
col_values = sheet1.col_values(2)
print('第三列的內(nèi)容'+str(col_values))
我們看看輸出結(jié)果:

至于時(shí)間為什么是43812.0,這個(gè)是天數(shù),可以轉(zhuǎn)換成日期格式,后邊我會(huì)詳細(xì)寫(xiě)用法~

百分百?zèng)]毛病的!~
獲取具體幾行幾列的內(nèi)容
這個(gè)方法有很多,都可以用,看個(gè)人習(xí)慣,我列舉六種:
print(sheet1.cell_value(1, 1)) print(sheet1.cell(1, 1)) print(sheet1.row(1)[1]) print(sheet1.col(1)[1]) print(sheet1.row_values(1)[1]) print(sheet1.col_values(1)[1])
想知道某行某列的類型是什么怎么做呢?
print(sheet1.cell(1, 0).ctype) print(sheet1.cell(1, 2).ctype) print(sheet1.cell(1, 3).ctype)
輸出結(jié)果為:
1
2
3
ctype 分別: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
tip: 打印的時(shí)候需要注意:
python跟java在類型轉(zhuǎn)換上有很大的不同,這點(diǎn)我更喜歡Java的處理方式(打印的時(shí)候通通轉(zhuǎn)換成String類型),比如我想打印很多類型的屬性,同時(shí)打印沒(méi)問(wèn)題,但是Python必須要限定類型為str,否則就會(huì)報(bào)錯(cuò)
public class test {
public static void main(String[] args) {
int num = 1;
String ss = "sss";
System.out.println("Integer"+num+"String"+ss);
}
}
java完全可以正常運(yùn)行~
Python:
a = 1
b = 'ss'
print('int:'+a+'str'+ b)
拼接的時(shí)候必須限定a和b為str類型,否則報(bào)錯(cuò)!
報(bào)錯(cuò)內(nèi)容:

如何修改date類型為float類型的數(shù)字
想修改時(shí)間格式的屬性:
as_tuple = xlrd.xldate_as_tuple(sheet1.cell_value(1, 3), workbook.datemode)
cell_value(1,3) 表示我要獲取 2019/11/13

第二個(gè)參數(shù)datemode就不解釋了,需要改哪個(gè)文件,就調(diào)用哪個(gè)文件對(duì)象的datemode
我們輸出一下as_tuple這個(gè)對(duì)象:

看到這個(gè)元組里的數(shù)據(jù)也可以看出來(lái),前三個(gè)分別就是年月日了,所以我們要提取這三個(gè)數(shù)字:
d = date(*as_tuple[:3])
date()這個(gè)方法需要三個(gè)參數(shù),分別是年月日,所以我們提取元組的前三個(gè)數(shù)字正好可以:
我們打印一下:

這個(gè)不就是我們需要的格式嗎?
等等,我是用斜杠“/”隔開(kāi)的,這個(gè)怎么是“-”,我們改一下格式,通過(guò)strftime(string formate time)方法:
strftime = d.strftime('%Y/%m/%d')打印一下:

這樣就完美了~
怎么獲取合并單元格
我們轉(zhuǎn)到sheet2

可以看到第六行的2-5列都是合并單元格,內(nèi)容是無(wú),第七行和第八行的第二列是合并單元格,內(nèi)容是無(wú),第七行和第八行的第四和第五列是合并單元格,內(nèi)容是啥都沒(méi)有。
我們需要用到方法:merged_cells
sheet2 = workbook.sheet_by_name('Sheet2')
print(sheet2.merged_cells)
輸出結(jié)果:
[(5, 6, 1, 5), (6, 8, 1, 2), (6, 8, 3, 5)]
這個(gè)5615,6812,6835啥意思?
四個(gè)參數(shù)分別為行、行最大(不超過(guò)最大行)、列、列最大(不超過(guò)最大列)
拿5615舉例子,第五行到第六行的左閉右開(kāi)區(qū)間[5,6),這就是第五行,[1,5)表示第一列到第四列,我們看:

由于python是從零開(kāi)始,所以python的第五行,實(shí)際上是Excel的第六行,第1-4列就 是 2-5列,這不就是無(wú)嗎?這只是告訴你哪些是合并單元格,想打印怎么辦?
print(sheet2.cell_value(5, 1)) print(sheet2.cell_value(6, 1)) print(sheet2.cell_value(6, 3))
只去第一個(gè)和第三個(gè)參數(shù)就可以打印出來(lái)啦

看到這里說(shuō)明你真的很努力~看懂為主哦!感謝點(diǎn)贊,有錯(cuò)誤請(qǐng)指正,有問(wèn)題留言告訴我!Bye Bye

到此這篇關(guān)于Python3使用xlrd、xlwt處理Excel方法數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python3使用xlrd、xlwt處理Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python編寫(xiě)一個(gè)根據(jù)姓名測(cè)性別的小程序
這篇文章主要為大家介紹了如何利用Python編寫(xiě)一款根據(jù)中文名能猜測(cè)性別的一款界面化的小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03
python 基于pygame實(shí)現(xiàn)俄羅斯方塊
這篇文章主要介紹了python 基于pygame實(shí)現(xiàn)俄羅斯方塊的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
Python 解析庫(kù)json及jsonpath pickle的實(shí)現(xiàn)
這篇文章主要介紹了Python 解析庫(kù)json及jsonpath pickle的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Python+Selenium自動(dòng)化環(huán)境搭建與操作基礎(chǔ)詳解
Selenium是如今最常用的自動(dòng)化測(cè)試工具之一,支持快速開(kāi)發(fā)自動(dòng)化測(cè)試框架,且支持在多種瀏覽器上執(zhí)行測(cè)試。本文將介紹關(guān)于Selenium?Python自動(dòng)化腳本環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下2022-03-03
Python爬取科目四考試題庫(kù)的方法實(shí)現(xiàn)
這篇文章主要介紹了Python爬取科目四考試題庫(kù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
?分享一個(gè)Python?遇到數(shù)據(jù)庫(kù)超好用的模塊
這篇文章主要介紹了?分享一個(gè)Python?遇到數(shù)據(jù)庫(kù)超好用的模塊,SQLALchemy這個(gè)模塊,該模塊是Python當(dāng)中最有名的ORM框架,該框架是建立在數(shù)據(jù)庫(kù)API之上,使用關(guān)系對(duì)象映射進(jìn)行數(shù)據(jù)庫(kù)的操作,,需要的朋友可以參考下2022-04-04

