亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組

 更新時(shí)間:2022年11月04日 10:57:53   作者:knighthood2001  
python處理數(shù)據(jù)文件的途徑有很多種,下面這篇文章主要給大家介紹了關(guān)于如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近需要讀取Excel中的內(nèi)容,然后進(jìn)行后續(xù)操作,對(duì)于這塊知識(shí),博主以前以為自己不會(huì)涉及到,但是現(xiàn)在一涉及到,第一步就錯(cuò)了,搞了好久。真的心累。因此寫了這篇博客。 

目的:

excel中存放著數(shù)據(jù),如果要進(jìn)行計(jì)算及其它操作,首先就要進(jìn)行讀取。

我們先來(lái)看一下python中能操作Excel的庫(kù)對(duì)比(一共九個(gè)庫(kù)):

可以發(fā)現(xiàn),還是挺多的

這里使用的是xlrd庫(kù)。

安裝

這里首先就是導(dǎo)入這個(gè)包,

pip install xlrd==1.2.0

xlrd包版本最好是1.2.0,因?yàn)楣P者使用2.多版本的xlrd時(shí),代碼出現(xiàn)了類似下面的報(bào)錯(cuò),也就是說(shuō)xlrd版本太高會(huì)導(dǎo)致無(wú)法支持讀取xlsx后綴的excel。

xlrd.biffh.XLRDError: Excel xlsx file; not supported

大家可以去試試將excel另存,看看保存類型。

目前筆者使用的是Excel2019版本的,默認(rèn)保存類型為xlsx。

如果你之前已經(jīng)安裝xlrd高版本或更低版本了,建議先卸載一下,重新安裝。

pip uninstall xlrd
pip install xlrd==1.2.0

實(shí)例

初階 

一個(gè)excel中有如上數(shù)據(jù),我們需要將其提取出來(lái),方便python進(jìn)行后續(xù)操作。

代碼如下:

def extract1(file,index=0):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    all = []
    for i in range(rows):
        a = worksheet.row_values(i)[:]
        all.append(a)
    print(all)
    cc = np.array(all)
    print(cc)
    return cc

file是文件的路徑及名稱,index就是當(dāng)前sheet表的索引。 下圖就是具體的索引。

當(dāng)然也可以根據(jù)sheet表的名稱。

如下面代碼第一行按照的是索引方式,第二行按照的是sheet名稱。大家可自行選擇

    worksheet = workbook.sheet_by_index(0)
    worksheet = workbook.sheet_by_name("sheet1")
rows = worksheet.nrows

返回的是sheet表的行數(shù),ncols則是列數(shù)

    all = []
    for i in range(rows):
        a = worksheet.row_values(i)[:]
        all.append(a)

首先定義一個(gè)空列表,然后遍歷每行,將里面的數(shù)據(jù)寫入列表中,

row_values()

是用來(lái)返回給定行中單元格值的切片。 

最后將其轉(zhuǎn)換成數(shù)組類型即可。(按要求來(lái),大家也可以不換)

下圖是結(jié)果:

換個(gè)高級(jí)的寫法,用推導(dǎo)式寫(濃縮才是精華)

def extract(file,index=0):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    c = tuple(worksheet.row_values(i)[:] for i in range(rows))
    a = np.array(c)
    print(a)
    return a

 代碼行數(shù)瞬間縮短了。

最好調(diào)用一下函數(shù)即可

file = r'C:\Users\knighthood\OneDrive\桌面\11.xlsx'
extract1(file)

進(jìn)階1

要求:假如我excel只要圖中框出來(lái)的區(qū)域。

以下為了看的較為簡(jiǎn)便,我使用推導(dǎo)式的代碼

def confine_array(file,index=0):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    c = tuple(worksheet.row_values(i)[1:] for i in range(1, rows))
    a = np.array(c)
    print(a)
    return a

如上,可以發(fā)現(xiàn),代碼變化之處就下面這一行。

    c = tuple(worksheet.row_values(i)[1:] for i in range(1, rows))

一步步講解:

①for i in range(1, rows)

        首先對(duì)于后面的for循環(huán),i控制的就是獲取的行,更改其范圍就會(huì)更改獲取到的行、行數(shù)。

如果是上面說(shuō)的(1,rows),則對(duì)應(yīng)著獲取第二行到最后一行,(0表示第一行)

②worksheet.row_values(i)[1:]

        最后的[1:](本來(lái)的代碼中是沒有或者是[:])表示的是i行的元素從第2列(個(gè))獲取到最后一行(個(gè))。

因此我們只需要更改這兩處就可以獲得不同的內(nèi)容矩陣(如下)。

def flexible_array(file,index=0,row=1,col=1):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    c = tuple(worksheet.row_values(i)[col:] for i in range(row,rows))
    a = np.array(c)
    print(a)
    return a

結(jié)果如下圖 

進(jìn)階2

要求:能不能更簡(jiǎn)化一點(diǎn),根據(jù)我從哪個(gè)位置要數(shù)據(jù),如第二行第二列開始,將這后面的數(shù)據(jù)進(jìn)行讀取。每次這樣對(duì)來(lái)對(duì)去,容易出錯(cuò),還是根據(jù)行列開始計(jì)算比較方便。

這里為了防止行列一樣,我就多加了一列。

def flexible1_array(file,index=0,row=1,col=1):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    c = tuple(worksheet.row_values(i)[col-1:] for i in range(row-1,rows))
    a = np.array(c)
    print(a)
    return a

代碼也主要變化了這一行 

    c = tuple(worksheet.row_values(i)[col-1:] for i in range(row-1,rows))

這里筆者就不多解釋了。 

現(xiàn)在就可以根據(jù)需要的起始單元格所在的行列進(jìn)行選取所要的內(nèi)容。

進(jìn)階3

要求:不需要最后一列

這里的話,筆者就設(shè)置了最后需要的行和列作為結(jié)束的讀取。

def flexible2_array(file,index=0,row=1,col=1,end_row=None,end_col=None):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    if end_row is None:
        c = tuple(worksheet.row_values(i)[col-1:end_col] for i in range(row-1, rows))
    else:
        c = tuple(worksheet.row_values(i)[col - 1:end_col] for i in range(row - 1, end_row))
    a = np.array(c)
    print(a)
    return a

上述代碼意思是,如果不輸入結(jié)束的行和列,讀取到的是包含數(shù)據(jù)的行列,如果輸入了行和列(或者其中一個(gè)),就讀取相應(yīng)的內(nèi)容。由于end_row放在range()函數(shù)中,因此需要加個(gè)if判斷。

結(jié)果如下:

        此外,我還發(fā)現(xiàn),end_col由于放在[]中,可輸入負(fù)數(shù)(不懂的可以去看看python列表負(fù)索引)。

不過這里的-1,其實(shí)際是排除了最后一列,從你輸入的行列到,你輸入的結(jié)束行和倒數(shù)第二列。

有些人可能會(huì)覺得別扭(比如我,更喜歡-1表示從起始列到最后一列,-2表示從起始列到倒數(shù)第二列)

def flexible3_array(file,index=0,row=1,col=1,end_row=None,end_col=None):
    workbook = xlrd.open_workbook(file)
    worksheet = workbook.sheet_by_index(index)
    rows = worksheet.nrows
    if end_row is None:
        c = tuple(worksheet.row_values(i)[col-1:end_col if end_col > 0 else end_col+1] for i in range(row-1, rows))
    else:
        c = tuple(worksheet.row_values(i)[col-1:end_col if end_col > 0 else end_col+1] for i in range(row - 1, end_row))
    a = np.array(c)
    print(a)
    return a

這里,代碼中將判斷end_col是否為負(fù),使用了if-else寫在一行。減少了很多代碼判斷量,使看起來(lái)更簡(jiǎn)潔。 

這里看個(gè)人喜好是否使用這個(gè)方法。 

還有一個(gè)end_col參數(shù)使用負(fù)數(shù)的原因是,end_row由于在excel中對(duì)應(yīng)的是行,其用的是數(shù)字表示,而excel中列用字母表示,因此如果當(dāng)數(shù)據(jù)列數(shù)太多的時(shí)候(如下圖),去數(shù)列還是挺麻煩的

總結(jié)

上述內(nèi)容是一步一步進(jìn)行修改添加的,對(duì)應(yīng)著平時(shí)要求的逐漸添加,功能的逐漸完善。

筆者在上篇構(gòu)建層次分析法,用到的數(shù)據(jù)矩陣,可以和這篇一起結(jié)合,通過excel讀取轉(zhuǎn)為數(shù)組,然后進(jìn)行層次分析法的操作。

到此這篇關(guān)于如何使用python讀取Excel指定范圍并轉(zhuǎn)為數(shù)組的文章就介紹到這了,更多相關(guān)python讀取Excel并轉(zhuǎn)數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Numpy之如何改變數(shù)組形狀

    Numpy之如何改變數(shù)組形狀

    這篇文章主要介紹了Numpy之如何改變數(shù)組形狀問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Django中外鍵使用總結(jié)

    Django中外鍵使用總結(jié)

    本文主要介紹了Django中外鍵使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python用 KNN 進(jìn)行驗(yàn)證碼識(shí)別的實(shí)現(xiàn)方法

    Python用 KNN 進(jìn)行驗(yàn)證碼識(shí)別的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python用 KNN 進(jìn)行驗(yàn)證碼識(shí)別的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解

    在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解

    下面小編就為大家分享一篇在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-04-04
  • Python解決MySQL數(shù)據(jù)處理從SQL批量刪除報(bào)錯(cuò)

    Python解決MySQL數(shù)據(jù)處理從SQL批量刪除報(bào)錯(cuò)

    這篇文章主要為大家介紹了Python解決MySQL數(shù)據(jù)處理從SQL批量刪除報(bào)錯(cuò),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 使用Python讀寫文本文件及編寫簡(jiǎn)單的文本編輯器

    使用Python讀寫文本文件及編寫簡(jiǎn)單的文本編輯器

    這篇文章主要介紹了使用Python讀寫文本文件及編寫簡(jiǎn)單的文本編輯器的方法,可以利用簡(jiǎn)單的Python代碼實(shí)現(xiàn)編輯器中的讀取清空和文本文件的新建等操作,需要的朋友可以參考下
    2016-03-03
  • Python3.6 中的pyinstaller安裝和使用教程

    Python3.6 中的pyinstaller安裝和使用教程

    這篇文章主要介紹了Python3.6 中的pyinstaller安裝和使用的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • TensorFlow低版本代碼自動(dòng)升級(jí)為1.0版本

    TensorFlow低版本代碼自動(dòng)升級(jí)為1.0版本

    這篇文章主要介紹了TensorFlow低版本代碼自動(dòng)升級(jí)為1.0版本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python之json格式解析與轉(zhuǎn)換方式

    python之json格式解析與轉(zhuǎn)換方式

    使用Python的內(nèi)置json庫(kù)可以實(shí)現(xiàn)JSON和Python對(duì)象的互相轉(zhuǎn)換,有效的JSON格式字符串是指使用雙引號(hào)、鍵唯一且沒有尾隨逗號(hào)的字符串,json.loads()用于將JSON字符串轉(zhuǎn)換為Python對(duì)象,json.dumps()則將Python對(duì)象轉(zhuǎn)化為JSON字符串
    2024-09-09
  • python強(qiáng)大的hook函數(shù)使用及應(yīng)用場(chǎng)景

    python強(qiáng)大的hook函數(shù)使用及應(yīng)用場(chǎng)景

    鉤子函數(shù)(hook function)是把我們自己實(shí)現(xiàn)的hook函數(shù)在某一時(shí)刻掛接到目標(biāo)掛載點(diǎn)上,這篇文章主要介紹了python強(qiáng)大的hook函數(shù)使用及應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2023-05-05

最新評(píng)論