<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一網(wǎng)打盡Pandas中的各種索引 iloc,loc,ix,iat,at,直接索引

          共 4283字,需瀏覽 9分鐘

           ·

          2021-08-10 21:09

          一、索引的概述

          很多人在使用Pandas選取數(shù)據(jù)時,總會迷失在data[]、iloc()、loc()、ix()、at()、iat()中,似乎記得,又似乎不記得,每到用時都需要百度,不知所以然的解決了問題,下次繼續(xù)百度,記憶點基本上非?;靵y。本文就是希望能解決這個問題,通過一個簡單的DataFrame徹底搞明白這三個函數(shù)到底有什么區(qū)別,又該怎么使用,希望對你有用。

           

          日常使用中,推薦使用loc和iloc進行索引,loc是指location的意思,iloc中的 i 是指integer,這兩個方法容易混淆,可以使用特殊方式來加強記憶。

          iloc:基于位置,用行號、列號進行索引,i 可以看著 int,因此 iloc 只能用整數(shù)來索引,例如data.iloc[0:2,:]

          loc :基于標簽,用行名、列名進行索引,數(shù)據(jù)的index經(jīng)常為整數(shù),因此 loc 的使用范圍要遠高于iloc,loc可以使用整數(shù)切片、名稱(index,columns)索引、也可以切片和名稱混合使用。例如:data.loc[0:5:,'row1':'row2']

           

          我們簡單構(gòu)造一個數(shù)據(jù)集,在下面的案例中需要用到。

          import pandas as pdimport numpy  as npdata = pd.DataFrame(np.arange(25).reshape(5, 5),                   index = ['row1', 'row2','row3','row4','row5'],                   columns=['col1', 'col2','col3','col4', 'col5'])data       col1  col2  col3  col4  col5row1     0     1     2     3     4row2     5     6     7     8     9row3    10    11    12    13    14row4    15    16    17    18    19row5    20    21    22    23    24


          二、用列名直接索引 (不推薦)

          取一列:data['col1']  即取得第一列,得到的是一個Series對象。

          取多列:data[['col1','col2']]

          注 意:

          data['row1'] 、data[0]、data[:,0]、data[0,:]、data[:,'col1':'col2'] 統(tǒng)統(tǒng)都會報錯的,這類命令只能用來按列名取一列或多列。

          data['col1']row1     0row2     5row3    10row4    15row5    20Name: col1, dtype: int32
          data[['col1','col2']] col1 col2row1 0 1row2 5 6row3 10 11row4 15 16row5 20 21
          #下面的命令直接應(yīng)用都會報錯,但是用loc 和 iloc 就不會報錯data['row1']data[0]data[:,0]data[0,:]data[:,'col1':'col2'] #TypeError: '(slice(None, None, None), 0)' is an invalid key



          三、用行號直接索引(不推薦)

          data[0:2]代表取得第0行和第1行

          注 意:

          只取一行的話,要用data[0:1],不能用data[0]。data[0:2,]也會報錯

          data[0:2] col1 col2 col3 col4 col5row1 0 1 2 3 4row2 5 6 7 8 9

           


          四、iloc按行號、列號來索引(推薦)

          1)取一行 :data.iloc[0]  、data.iloc[0,:]

          2)取多行 :data.iloc[[0,2]] 、data.iloc[[0,2],:]

          3)取連續(xù)多行 :data.iloc[0:2] 、data.iloc[0:2,:]

          4)取一列 : data.iloc[:,0]

          5)取多列 :data.iloc[:,[0,2]]、data.iloc[:,[0,2]]

          6)取連續(xù)多列data.iloc[:,0:2]

          注 意:

          取行的時候可以不提列,也可以用",:"來指全列

          取列的時候必須用":,"來指定全行。

          可以使用一個數(shù)字來代表一個,可以使用一個列表[a,b]代表多個,也可以使用a:b代表連續(xù)多個。

          data.iloc[0]col1    0col2    1col3    2col4    3col5    4data.iloc[:,2:4]      col3  col4row1     2     3row2     7     8row3    12    13row4    17    18row5    22    23

           


          五、loc按行名、列名來索引(推薦)

          1)取一行:data.loc['row1']   、data.loc['row1',:]

          2)取多行:data.loc[['row1','row2']]  、data.loc[['row1','row2'],:]

          3)取連續(xù)多行:data.loc['row1':'row2']   、data.loc['row1':'row2',:]

          4)取一列:data.loc[:,'col1']

          5)取多列:data.loc[:,['row1','row2']]

          6)取連續(xù)多列:data.loc[:,'row1':'row2']

          注 意:

          取行的時候可以不提列,也可以用",:"來指全列。

          取列的時候必須用":,"來指定全行。

          可以使用一個數(shù)字來代表一個,可以使用一個list ['a','b']代表多個,也可以使用'a':'b'代表連續(xù)多個。

          data.loc[:,'col1':'col3']       col1  col2  col3row1     0     1     2row2     5     6     7row3    10    11    12row4    15    16    17row5    20    21    22
          #當索引為整數(shù)時,可以用整數(shù)進行索引data = pd.DataFrame(np.arange(25).reshape(5, 5), columns=['col1', 'col2','col3','col4', 'col5']) col1 col2 col3 col4 col50 0 1 2 3 41 5 6 7 8 92 10 11 12 13 143 15 16 17 18 194 20 21 22 23 24data.loc[0:3,'col1':'col3'] col1 col2 col30 0 1 21 5 6 72 10 11 123    15    16    17

           


          六、使用iat和at(不推薦)

          iat 和 at 只能取單個元素,iat 使用行、列索引,at 使用行、列名,但是其功能被 iloc 和 loc 包含,因此不推薦。

          data.iat[1,2]7

           

          七、使用ix(不推薦)

          ix 相當于 loc 和 iloc 的綜合版本,既可以按標簽選取,又可以按位置選取,也就是說,ix可以識別你是想按照標簽選取,還是按照位置選取。

          關(guān)于ix,它是先于 iloc 和 loc 產(chǎn)生的,現(xiàn)在基本上用 iloc 和 loc 已經(jīng)完全能取代 ix ,所以 ix 已經(jīng)被官方棄用了。就不贅述了。

           

          最后總結(jié):(重點!?。。。?/strong>

          正常情況下,推薦使用 iloc 和 loc。最核心的點記住,取行可以不提列,取列必須提行,可以用一個數(shù)字,一個list,或者一個區(qū)間來取行列。


          ···  END  ···

          推薦閱讀:
          Pandas中的寶藏函數(shù)-map
          Pandas中的寶藏函數(shù)-apply
          Pandas中的寶藏函數(shù)-applymap
          一、Number(數(shù)字)
          全面掌握Python基礎(chǔ),這一篇就夠了,建議收藏
          Python基礎(chǔ)之數(shù)字(Number)超級詳解
          Python隨機模塊22個函數(shù)詳解
          Python數(shù)學(xué)math模塊55個函數(shù)詳解
          二、String(字符串)
          Python字符串的45個方法詳解
          Pandas向量化字符串操作
          三、List(列表)
          超級詳解系列-Python列表全面解析
          Python輕量級循環(huán)-列表推導(dǎo)式
          四、Tuple(元組)
          Python的元組,沒想象的那么簡單
          五、Set(集合)
          全面理解Python集合,17個方法全解,看完就夠了
          六、Dictionary(字典)
          Python字典詳解-超級完整版
          七、內(nèi)置函數(shù)
          Python初學(xué)者必須吃透這69個內(nèi)置函數(shù)!
          八、正則模塊
          Python正則表達式入門到入魔
          筆記 | 史上最全的正則表達式
          八、系統(tǒng)操作
          Python之shutil模塊11個常用函數(shù)詳解
          Python之OS模塊39個常用函數(shù)詳解
          九、進階模塊
          【萬字長文詳解】Python庫collections,讓你擊敗99%的Pythoner
          高手如何在Python中使用collections模塊

          掃描關(guān)注本號↓

          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月婷婷色色网 | 无码动漫在线黄 | 少妇一区二区三区97 | 亚洲专区在线播放 | 色色色色色五月 |