pandas 學習 第5篇:DataFrame - 訪問數據框


數據框是用於存儲數據的二維結構,分為行和列,一行和一列的交叉位置是一個cell,該cell的位置是由行索引和列索引共同確定的。可以通過at/iat,或loc/iloc屬性來訪問數據框的元素,該屬性后跟一個中括號:[row,col],中括號內 row表示行索引或行標簽,col表示列索引或列標簽。如果省略row, 那么row維度使用“:”代替,格式是 [ :, col] ,表示訪問所有行的特定列;如果省略col ,格式是[row],表示訪問特定行的所有列。

有以下數據框對象df,其數據和索引如下:

       year   state  pop
one    2000    Ohio  1.5
two    2001    Ohio  1.7
three  2002    Ohio  3.6
four   2001  Nevada  2.4
five   2002  Nevada  2.9

一,索引單個cell

通過元素的行和列索引對來訪問單個cell,at 和 iat 屬性只能訪問當個cell,區別是at可以使用字符串和整數,而iat只能使用整數。

at 和 iat 的格式是:[row, column], 第一個維度是行索引,第二個維度是列索引。

通過iat屬性(設置下標)來訪問單個cell:

>>> df.iat[1,2]
1.7

通過at屬性(設置標簽)來訪問單個cell:

>>> df.at['two','pop']
1.7

二,通過位置來訪問多個元素

loc 和 iloc 屬性可以訪問多個cell,區別是loc可以使用標簽和布爾(掩碼)數組,不能使用整數位置(整數代表元素的位置),而iloc只能使用整數位置。

loc 和 iloc的格式是:

  • [row] 訪問單行,包括所有列
  • [row, column]  訪問有row 和 column 確定的元素

.loc[] 主要基於標簽,但也可以與布爾數組一起使用。在格式 .loc[row,col] 中,row和col允許的輸入有:

  • label:單個標簽,表示行標簽,索引的數據是一行
  • [label]:標簽數組,表示行標簽數組,索引的數據是多行
  • ['a':'f'] 或 ['a':'f']:索引切片
  • [True, False, True]:和axis等長的布爾數組

 舉個例子,分別使用iloc 和loc來訪問數組的多個元素:

>>> df.iloc[[0,1],[0,2]]
     year  pop
one  2000  1.5 two 2001 1.7 >>> df.loc[['one','two'],['year','pop']] year pop one 2000 1.5 two 2001 1.7

三,訪問整列的數據

直接通過列名來訪問DataFrame的數據,選擇特定列的所有數據行,有兩種格式是:

  • df['col']    單列索引方式
  • df.col     屬性方式
  • df[['col1','col2']]  列索引數組方式

1,屬性方式 和單列索引方式

對於屬性方式和單列索引方式,只能用於訪問單列,返回的是Series對象:

df['state']
df.state

屬性方式是指:列名作為DataFrame對象的屬性,通過 .  號引用列名來訪問一列的值

單列索引方式是指:列名作為DataFrame對象的索引,通過[] 號索引列來訪問一列的值

2,列索引數組方式

對於列索引數組方式,一次訪問多列,返回的對象是DataFrame類型

df[['year','state']]

3,對序列進行查詢

對於單列索引和屬性方式,返回的結果是一個序列,因此,可以通過[idx]來訪問序列中的元素,[]中的索引idx是行索引,也就是說,使用 .col[row] 或 [col][row] 來訪問單個cell,舉個列子:

>>> df.year['one']
2000
>>> df['year']['one'] 2000

四,索引數組

索引數組是指DataFrame使用數組作為索引,索引數組可以是行標簽、列標簽,或者行索引、列索引,也可以是布爾(掩碼)索引數組。

1,列標簽構成的索引數組

數據框對象可以使用loc和列標簽來訪問數據,例如,省略row維度,選擇state和pop列的所有數據行:

>>> df.loc[:,['state','pop']]
        state  pop
one      Ohio  1.5
two      Ohio  1.7
three    Ohio  3.6
four   Nevada  2.4
five   Nevada  2.9

2,掩碼索引數組

掩碼索引數組是由True和False構成的數組,在特定的軸(維度)上,維度的長度和掩碼索引的長度相同,選擇True對應的索引,忽略False對應的索引。

舉個例子,省略row維度的索引,由於該數據框由三列,可以把year和state列對應的掩碼設置為True,把pop列對應的掩碼設置為False。

>>> df.columns
Index(['year', 'state', 'pop'], dtype='object')
>>> df.loc[:,[True,True,False]]
       year   state
one    2000    Ohio
two    2001    Ohio
three  2002    Ohio
four   2001  Nevada
five   2002  Nevada

序列具有矢量化操作的特性,當選擇某一列時,可以通過邏輯運算得出掩碼索引數組:

>>> df['pop']>=2
one      False
two      False
three     True
four      True
five      True
Name: pop, dtype: bool
>>> df.loc[df['pop']>=2]
       year   state  pop
three  2002    Ohio  3.6
four   2001  Nevada  2.4
five   2002  Nevada  2.9

五,遍歷DataFrame

使用iterrows() 遍歷數據框,iterrows()返回值為元組(index,row) ,每次迭代返回一行數據:

for index,row in df.iterrows():
    print(index,row)

使用itertuples()遍歷數據框,返回的是命名元組:

DataFrame.itertuples(self, index=True, name='Pandas')

使用items()或 iteritems()遍歷數據框,返回值為元組(column,Series),每次迭代返回一列數據:

>>> for col_name,col in df.items():
...     print(col_name,col)

 

 

 

參考文檔:

pandas DataFrame


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM