首頁 > 軟體

如何使用Python讀取.xlsx指定行列

2022-09-24 14:00:19

引言

本文以Python3.9.1讀取data.xlsx中包含的西瓜資料集3.0資料為例,資料集如下:

編號色澤根蒂敲聲紋理臍部觸感密度含糖率好瓜
1青綠蜷縮濁響清晰凹陷硬滑0.6970.46
2烏黑蜷縮沉悶清晰凹陷硬滑0.7740.376
3烏黑蜷縮濁響清晰凹陷硬滑0.6340.264
4青綠蜷縮沉悶清晰凹陷硬滑0.6080.318
5淺白蜷縮濁響清晰凹陷硬滑0.5560.215
6青綠稍蜷濁響清晰稍凹軟粘0.4030.237
7烏黑稍蜷濁響稍糊稍凹軟粘0.4810.149
8烏黑稍蜷濁響清晰稍凹硬滑0.4370.211
9烏黑稍蜷沉悶稍糊稍凹硬滑0.6660.091
10青綠硬挺清脆清晰平坦軟粘0.2430.267
11淺白硬挺清脆模糊平坦硬滑0.2450.057
12淺白蜷縮濁響模糊平坦軟粘0.3430.099
13青綠稍蜷濁響稍糊凹陷硬滑0.6390.161
14淺白稍蜷沉悶稍糊凹陷硬滑0.6570.198
15烏黑稍蜷濁響清晰稍凹軟粘0.360.37
16淺白蜷縮濁響模糊平坦硬滑0.5930.042
17青綠蜷縮沉悶稍糊稍凹硬滑0.7190.103

程式碼段:

一、讀取工作表內容(.xlsx轉化為DataFrame)

匯入pandas庫,讀取工作表資料

import pandas as pd
df = pd.read_excel(r'E:Aownplandata.xlsx')#預設讀取工作簿中第一個工作表,預設第一行為表頭

備註:r是為了讀取檔案路徑中字元,防止跳脫

此處利用pandas庫的 read_excel 函數讀取檔案,獲取到的函數返回值型別為DataFrame,後續所有的操作均是基於DataFrame的資料操作方法進行。

二、獲取指定行指定列資料(DataFrame轉化為numpy.ndarray)

獲取整個工作表資料

data=df.values#獲取整個工作表資料
print("讀取整個工作表的資料:n{0}".format(data))

獲取某一行資料

data=df.iloc[0].values#0表示第一行,不包含表頭
print("讀取指定行的資料:n{0}".format(data))

獲取多行資料

data=df.head().values#head()預設讀取前5行資料(不包含表頭)
print("獲取工作表前5行資料:n{0}".format(data))

data=df.iloc[[1,2]].values#讀取指定多行,在iloc[]裡面巢狀列表指定行數
print("讀取指定多行的資料:n{0}".format(data))

data=df.sample(3).values#讀取df中隨機3行資料(3個樣本)
print("獲取隨機多行資料:n{0}".format(data))

獲取指定單元格資料

data=df.iloc[1,2]#讀取索引為[1, 2]的值,這裡不需要巢狀列表
print("讀取指定某行某列(單元格)的資料:n{0}".format(data))

獲取指定列資料

print("輸出值n",df['含糖率'].values)

獲取指定多列資料

data=df.loc[:,['敲聲','紋理']].values#讀所有行的敲聲以及紋理列的值,這裡需要巢狀列表
print("讀取指定列的資料:n{0}".format(data))

獲取指定多行多列資料

data=df.loc[[1,2],['密度','含糖率']].values#讀取第一行第二行的密度以及含糖率列的值,這裡需要巢狀列表
print("讀取指定多行多列的資料:n{0}".format(data))

獲取行號和列標題

print("輸出行號列表",df.index.values)
print("輸出列標題",df.columns.values)

三、資料處理(numpy.ndarray轉化為list/set/dict)

(1) 轉化為列表list

以上通過.values方法獲取到的data值,均為二維值陣列(numpy.ndarray)型別,在使用時如果需要轉換為列表型別,可使用.tolist()方法,如:

data=df.values.tolist()

此時的輸出為:

此時的data為list型別,其中每一行資料均為一個列表,多個列表合併為一個二維列表,此時要獲取指定行(m)的資料,使用 data[m],獲取指定單元格資料,使用data[m][n]。

(2) 轉化為集合set

在分析時,若想獲取某一列的資料集合,則可以先提取該列資料,然後使用set()函數將其轉化為集合即可,如當前為獲取敲聲的型別,進行如下操作:

data=df['敲聲'].values
print(set(data))

此時的輸出:

{'清脆', '濁響', '沉悶'}

獲取除編號,密度,含糖率外所有列的集合:

titles = df.columns.values
for title in titles:
    if title != '編號' and title != '密度' and title != '含糖率':
        key = df[title].values
        values = set(key)
        print(title,':',values)

輸出:

色澤 : {'烏黑', '青綠', '淺白'}
根蒂 : {'蜷縮', '稍蜷', '硬挺'}
敲聲 : {'清脆', '濁響', '沉悶'}
紋理 : {'清晰', '稍糊', '模糊'}
臍部 : {'平坦', '稍凹', '凹陷'}
觸感 : {'硬滑', '軟粘'}
好瓜 : {'是', '否'}

(3) 轉化為字典dict

如果需要讀取某一行的資料為字典,可進行如下操作:

data=df.iloc[0].values#獲取某行資料
title=df.columns.values#獲取列標題
a=zip(title,data)#將其壓縮為一個元組
print(dict(a))#轉化為字典

輸出:

{'編號': 1, '色澤': '青綠', '根蒂': '蜷縮', '敲聲': '濁響', '紋理': '清晰', '臍部': '凹陷', '觸感': '硬滑', '密度': 0.697,'含糖率': 0.46, '好瓜': '是'}

獲取除編號,密度,含糖率外所有列的字典:

titles = df.columns.values
adict=dict()
for title in titles:
    if title != '編號' and title != '密度' and title != '含糖率':
        key = df[title].values
        adict[title]=set(key)
print(adict)

輸出:

{'色澤': {'烏黑', '青綠', '淺白'}, '根蒂': {'蜷縮', '稍蜷', '硬挺'}, '敲聲': {'清脆', '濁響', '沉悶'}, '紋理': {'清晰', '稍糊', '模糊'},  '臍部': {'平坦', '稍凹', '凹陷'}, '觸感': {'硬滑', '軟粘'},  '好瓜': {'是', '否'}}

參考文章:

[1]. Python利用pandas處理Excel資料的應用

總結

到此這篇關於如何使用Python讀取.xlsx指定行列的文章就介紹到這了,更多相關Python讀取.xlsx指定行列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com