欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解pandas中利用DataFrame對(duì)象的.loc[]、.iloc[]方法抽取數(shù)據(jù)

 更新時(shí)間:2020年12月13日 11:33:14   作者:馬爾代夫Maldives  
這篇文章主要介紹了pandas中利用DataFrame對(duì)象的.loc[]、.iloc[]方法抽取數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

pandas的DataFrame對(duì)象,本質(zhì)上是二維矩陣,跟常規(guī)二維矩陣的差別在于前者額外指定了每一行和每一列的名稱。這樣內(nèi)部數(shù)據(jù)抽取既可以用“行列名稱(對(duì)應(yīng).loc[]方法)”,也可以用“矩陣下標(biāo)(對(duì)應(yīng).iloc[]方法)”兩種方式進(jìn)行。
下面具體說(shuō)明:

(以下程序均在Jupyter notebook中進(jìn)行,部分語(yǔ)句的print()函數(shù)省略)

首先生成一個(gè)DataFrame對(duì)象:

import pandas as pd
score = [[34,67,87],[68,98,58],[75,73,86],[94,59,81]]
name = ['小明','小紅','小李']
course = ['語(yǔ)文','數(shù)學(xué)','英語(yǔ)','政治']
mydata1 = pd.DataFrame(data=score,columns=name,index=course)#指定行名(index)和列名(columns)
print(mydata1)
mydata2 = pd.DataFrame(score)#不指定行列名,默認(rèn)使用0,1,2……
print(mydata2)
#指定行列名
  小明 小紅 小李
語(yǔ)文 34 67 87
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86
政治 94 59 81
#采用默認(rèn)行列名
  0  1  2 (默認(rèn)列名)
0 34 67 87
1 68 98 58
2 75 73 86
3 94 59 81

DataFrame對(duì)象生成時(shí)除了必須指定data參數(shù)外,用戶還可以指定兩個(gè)參數(shù)columns(列名)和index(行名,注意這里的index不僅可以是數(shù)字,也可以是用戶指定的任何數(shù)據(jù)類型,如字母),如果不指定,則行列名默認(rèn)都采用0、1、2……。

下圖說(shuō)明了前面的情況:

DataFrame對(duì)象的.loc[]和.iloc[]方法都可用于抽取數(shù)據(jù),區(qū)別是:

  • .loc[]:是location,以columns(列名)和index(行名)作為參數(shù)。
  • .iloc[]:是index location,以二維矩陣的位置指標(biāo)(即0,1,2……)作為參數(shù)。

.loc[]語(yǔ)法

.loc[行標(biāo)簽名/[行標(biāo)簽名list],列標(biāo)簽名/[列標(biāo)簽名list]],即有兩個(gè)輸入?yún)?shù),第一個(gè)指定行名,第二個(gè)指定列名。當(dāng)只有一個(gè)參數(shù)時(shí),默認(rèn)是行名(即抽取整行),所有列都選中。

.iloc[]語(yǔ)法

.loc[行位置/[行位置list],列位置/[列位置list]],也有兩個(gè)輸入?yún)?shù),第一個(gè)指定行位置,第二個(gè)指定列位置。當(dāng)只有一個(gè)參數(shù)時(shí),默認(rèn)是行位置(即抽取整行),所有列都選中。

例1.抽取1行數(shù)據(jù)

#以下用.loc[]抽取1行名為‘語(yǔ)文'的數(shù)據(jù)(包括所有列)
mydata1.loc['語(yǔ)文']
mydata1.loc['語(yǔ)文',]
mydata1.loc['語(yǔ)文',:]
mydata1.loc[['語(yǔ)文'],]
mydata1.loc[['語(yǔ)文'],:]
#以下用.iloc[]抽取1行名為‘語(yǔ)文'的數(shù)據(jù)(包括所有列)
mydata1.iloc[0]
mydata1.iloc[0,]
mydata1.iloc[0,:]
mydata1.iloc[[0],]
mydata1.iloc[[0],:]

#輸出方式1(第1個(gè)參數(shù)無(wú)[],這是一個(gè)Series對(duì)象):
小明  34
小紅  67
小李  87
Name: 語(yǔ)文, dtype: int64
#輸出方式2(第1個(gè)參數(shù)有[],這是一個(gè)DataFrame對(duì)象):
  小明 小紅 小李
語(yǔ)文 34 67 87
Name: 語(yǔ)文, dtype: int64

上述.loc[]和.iloc[]都只接收了1個(gè)參數(shù)“語(yǔ)文”或者“0”,因此默認(rèn)都表示行信息,而列則全部被選中,即抽取'語(yǔ)文'這整一行數(shù)據(jù)。','表示將兩個(gè)參數(shù)隔開(如果有兩個(gè)參數(shù)的話),':'這里表示選擇中所有列。當(dāng)只有一個(gè)輸入?yún)?shù)時(shí),python默認(rèn)','和':'既可寫上也可省略。注意:參數(shù)['語(yǔ)文']或[0]中只有一個(gè)對(duì)象時(shí)(即只有一行),[]也可以省略,如果有多個(gè)對(duì)象(即多行)則必須加上[]。此外還需注意,加上[]表示抽取的結(jié)果無(wú)論是一個(gè)數(shù)據(jù),一行數(shù)據(jù),還是一列數(shù)據(jù),他都是DataFrame對(duì)象;不加[]時(shí),如果選中的是一行或者一列數(shù)據(jù),則是Series對(duì)象,如果是一個(gè)單獨(dú)的數(shù)據(jù),則是該數(shù)據(jù)本身的類型。

例2.指定行名抽取任意多行數(shù)據(jù)

#指定多行行名抽取
mydata1.loc[['英語(yǔ)','語(yǔ)文','政治'],:]
  小明 小紅 小李
英語(yǔ) 75 73 86
語(yǔ)文 34 67 87
政治 94 59 81
mydata1.iloc[[1,0],:]
  小明 小紅 小李
數(shù)學(xué) 68 98 58
語(yǔ)文 34 67 87

例2和例1唯一的差別是,第一個(gè)參數(shù)指定了多行一起輸出,此時(shí)必須用[]將各行名或者下標(biāo)括起來(lái),否則出錯(cuò)。后面的','和':'同例1,可省略。注意:原始數(shù)據(jù)的行順序是:語(yǔ)文、數(shù)學(xué)、英語(yǔ)、政治,這里的提取順序是['英語(yǔ)','語(yǔ)文','政治'],而輸出也是'英語(yǔ)','語(yǔ)文','政治',可見輸出順序和參數(shù)指定順序是一致的,而非按原始順序輸出。

例3.抽取連續(xù)任意多行數(shù)據(jù)

mydata1.loc['語(yǔ)文':'英語(yǔ)',:] #連續(xù)抽取從語(yǔ)文到英語(yǔ)的所有行
  小明 小紅 小李
語(yǔ)文 34 67 87
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86

mydata1.loc[:'英語(yǔ)',:] #連續(xù)抽取從第1行到英語(yǔ)的所有行
  小明 小紅 小李
語(yǔ)文 34 67 87
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86

mydata1.iloc[0:3,:] #連續(xù)抽取1~3行
  小明 小紅 小李
語(yǔ)文 34 67 87
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86

mydata1.iloc[1:,:] #連續(xù)抽取第2行最后一行
  小明 小紅 小李
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86
政治 94 59 81

例3依然是接受1個(gè)參數(shù),列參數(shù)沒(méi)有,后面的','和':'同例1,可省略。連續(xù)參數(shù)用‘start:end'的方式指定行范圍。注意:這里不能用[]將其括起來(lái),否則出錯(cuò)。此外用行列名連續(xù)取值時(shí),比如['語(yǔ)文':'政治']會(huì)把'政治'所在行也取出來(lái),而利用矩陣下標(biāo)時(shí),0:3只取0,1,2對(duì)應(yīng)的三行,最后一行不會(huì)取出;但是如果行列標(biāo)簽名本身就是整數(shù)0,1,2……,而不是文字或者其他類型,那么在使用連續(xù)行列標(biāo)簽名取數(shù)據(jù)時(shí),最后一行或者列是不會(huì)被取出的。

例4.抽取“列”的各種情況

mydata1.loc[:,['小紅']] #所有行,小紅列,只有一列時(shí),內(nèi)部[]也可以省略
  小紅
語(yǔ)文 67
數(shù)學(xué) 98
英語(yǔ) 73
政治 59

mydata1.loc[:,['小明','小紅']] #所有行,小明和小紅兩列
  小明 小紅
語(yǔ)文 34 67
數(shù)學(xué) 68 98
英語(yǔ) 75 73
政治 94 59

mydata1.iloc[:,[1,2]] #所有行,第2和第3列
  小紅 小李
語(yǔ)文 67 87
數(shù)學(xué) 98 58
英語(yǔ) 73 86
政治 59 81

mydata1.loc[:,'小明':] #連續(xù)抽取從小明列開始到最后一列
  小明 小紅 小李
語(yǔ)文 34 67 87
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86
政治 94 59 81

mydata1.iloc[:,:3] #連續(xù)抽取從1列開始到第3列
  小明 小紅 小李
語(yǔ)文 34 67 87
數(shù)學(xué) 68 98 58
英語(yǔ) 75 73 86
政治 94 59 81

抽取整列的方式跟抽取整行在參數(shù)設(shè)置上完全一樣。.loc[]和.iloc[]兩個(gè)方法默認(rèn)列為第二個(gè)參數(shù),因此抽取整列時(shí),都必須帶上':,'作為區(qū)分前面行參數(shù)的‘分隔符',否則出錯(cuò)。

例5.同時(shí)抽取指定行和列對(duì)應(yīng)數(shù)據(jù)

mydata1.loc['語(yǔ)文','小明'] #輸入了兩個(gè)參數(shù),輸出語(yǔ)文行小明列,即一個(gè)數(shù)據(jù)
34
<class 'numpy.int64'> #沒(méi)帶[]時(shí),單個(gè)數(shù)字是這種類型
mydata1.loc[['語(yǔ)文'],['小明']] #輸出語(yǔ)文行小明列,即一個(gè)數(shù)據(jù)
  小明
語(yǔ)文 34
<class 'pandas.core.frame.DataFrame'> #帶[]時(shí),輸出依然是DataFrame對(duì)象

mydata1.iloc[1,2] #第2行第3列數(shù)據(jù),單個(gè)數(shù)據(jù)
58
<class 'numpy.int64'> #注意沒(méi)帶[]時(shí)的輸出類型
mydata1.iloc[[1],[2]]
  小李
數(shù)學(xué) 58
<class 'pandas.core.frame.DataFrame'> #注意帶[]時(shí)的輸出類型

mydata1.loc[['語(yǔ)文','數(shù)學(xué)'],['小明']] #輸出語(yǔ)文數(shù)學(xué)行,小明列的數(shù)據(jù)
  小明
語(yǔ)文 34
數(shù)學(xué) 68

mydata1.iloc[1:,[0,2]] #輸出從第2行到最后一行,第1和第3行對(duì)應(yīng)數(shù)據(jù)
  小明 小李
數(shù)學(xué) 68 58
英語(yǔ) 75 86
政治 94 81

同時(shí)抽取分部行和列的情況,就是把上述單獨(dú)抽取行和列的方式合并起來(lái)用。抽取整個(gè)DataFrame對(duì)象則是.loc[:,:]或.iloc[:,:],雖然這么做沒(méi)啥意義。

總結(jié):

(1)DataFrame對(duì)象的.loc[,]和.iloc[,]方法用于抽取數(shù)據(jù),.loc[,]用行列的標(biāo)簽名作為參數(shù),.iloc[,]用二維矩陣元素的網(wǎng)格下標(biāo)作為參數(shù)。
(2)兩個(gè)方法都接受兩個(gè)參數(shù),第一個(gè)是“行標(biāo)簽”或者“矩陣行號(hào)”,第二個(gè)是“列標(biāo)簽”或者“矩陣列號(hào)”。
(3)兩種方法當(dāng)只指定一個(gè)輸入?yún)?shù)時(shí),都默是跟“行”相關(guān),而“列”則全部被選中。如何行和列都需要指定時(shí),中間用“逗號(hào),”隔開,這非常重要,否則出錯(cuò)。
(4)當(dāng)需要選中所有行的某幾列時(shí),行參數(shù)可以省略,列參數(shù)需要指定,此時(shí)列參數(shù)前面必須帶上“,:”,形如.loc[:,列參數(shù)],.iloc[:,列參數(shù)]。
(5).loc[,]和.iloc[,]設(shè)置了一個(gè)還是兩個(gè)輸入?yún)?shù),關(guān)鍵看有沒(méi)有“,”將兩個(gè)參數(shù)分開,且要區(qū)分逗號(hào)是一個(gè)參數(shù)的內(nèi)部逗號(hào),還有用于分隔行列參數(shù)的逗號(hào)。
(6)對(duì)于兩個(gè)參數(shù)的概念區(qū)分,.loc['語(yǔ)文','數(shù)學(xué)']這表示輸入了兩個(gè)參數(shù),行參數(shù)是‘語(yǔ)文',列參數(shù)是‘?dāng)?shù)學(xué)',對(duì)于上面的表格而言這是錯(cuò)的,因?yàn)闆](méi)有叫‘?dāng)?shù)學(xué)'的列,應(yīng)寫為[['語(yǔ)文','數(shù)學(xué)']],即‘?dāng)?shù)學(xué)'也是行參數(shù)的一部分,['語(yǔ)文','數(shù)學(xué)']整體作為一個(gè)行參數(shù),這里的逗號(hào)不是用以分隔行和列,僅僅是行l(wèi)ist里面的逗號(hào)。[['語(yǔ)文','數(shù)學(xué)']]=[['語(yǔ)文','數(shù)學(xué)'],]=[['語(yǔ)文','數(shù)學(xué)'],:],都表示只有一個(gè)行參數(shù),列全部選中。

到此這篇關(guān)于詳解pandas中利用DataFrame對(duì)象的.loc[]、.iloc[]方法抽取數(shù)據(jù)的文章就介紹到這了,更多相關(guān)pandas .loc[]、.iloc[]抽取數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm2019.3永久激活破解詳細(xì)圖文教程,親測(cè)可用(不定期更新)

    PyCharm2019.3永久激活破解詳細(xì)圖文教程,親測(cè)可用(不定期更新)

    這篇文章主要介紹了PyCharm2019.3最新激活碼(注冊(cè)碼)破解永久版詳細(xì)圖文教程的相關(guān)資料,親測(cè)可用,需要的朋友可以參考下
    2020-10-10
  • python讀取pdf格式文檔的實(shí)現(xiàn)代碼

    python讀取pdf格式文檔的實(shí)現(xiàn)代碼

    這篇文章主要給大家介紹了關(guān)于python讀取pdf格式文檔的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • selenium與xpath之獲取指定位置的元素的實(shí)現(xiàn)

    selenium與xpath之獲取指定位置的元素的實(shí)現(xiàn)

    這篇文章主要介紹了selenium與xpath之獲取指定位置的元素的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python添加列表元素append(),extend()及?insert()

    python添加列表元素append(),extend()及?insert()

    這篇文章主要介紹了python添加列表元素append(),extend()及?insert(),列表是儲(chǔ)存元素的數(shù)據(jù)類型,既然能存儲(chǔ)元素,那么就類似數(shù)據(jù)庫(kù)一樣,增刪改查的一些功能就不能少了。下面我們就來(lái)先看看添加列表元素方法有哪些,需要的朋友可以參考一下
    2022-03-03
  • 使用python獲取郵箱郵件的設(shè)置方法

    使用python獲取郵箱郵件的設(shè)置方法

    這篇文章主要介紹了使用python獲取郵箱郵件的設(shè)置方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Django mysqlclient安裝和使用詳解

    Django mysqlclient安裝和使用詳解

    這篇文章主要介紹了Django mysqlclient安裝和使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python解決方案:WindowsError: [Error 2]

    python解決方案:WindowsError: [Error 2]

    使用Python的rename()函數(shù)重命名文件時(shí)出現(xiàn)問(wèn)題,提示 WindowsError: [Error 2] 錯(cuò)誤,需要的朋友可以參考下
    2016-08-08
  • python中實(shí)現(xiàn)精確的浮點(diǎn)數(shù)運(yùn)算詳解

    python中實(shí)現(xiàn)精確的浮點(diǎn)數(shù)運(yùn)算詳解

    計(jì)算機(jī)智能處理可數(shù)集合的運(yùn)算,但是全體實(shí)數(shù)是不可數(shù)的,所以計(jì)算機(jī)只能用一些奇怪的方法來(lái)擬合他,于是就產(chǎn)生了浮點(diǎn)數(shù)。下面這篇文章主要給大家介紹了關(guān)于python中實(shí)現(xiàn)精確浮點(diǎn)數(shù)運(yùn)算的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • python  logging日志打印過(guò)程解析

    python logging日志打印過(guò)程解析

    這篇文章主要介紹了python logging日志打印過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 解決python tkinter界面卡死的問(wèn)題

    解決python tkinter界面卡死的問(wèn)題

    今天小編就為大家分享一篇解決python tkinter界面卡死的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論