當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DataFrame iloc屬性用法及代碼示例


Pandas 的 DataFrame.iloc 用於使用整數索引訪問或更新 DataFrame 的特定行/列。

注意

盡管它也可以用於訪問 DataFrame 中的單個值,但在這種情況下我們通常使用 DataFrame.iat 屬性。

返回值

如果在 [] 中使用單個標量,則返回 Series 。否則,返回 DataFrame

例子

考慮以下 DataFrame :

df = pd.DataFrame({"A":[1,2,3], "B":[4,5,6]}, index=["a","b","c"])
df



   A  B
a  1  4
b  2  5
c  3  6

訪問單行

要訪問第二行:

df.iloc[1]



A    2
B    5
Name: 1, dtype: int64

由於我們在 [] 中有一個標量,因此這裏的返回類型是 Series

訪問行的子集

要訪問位置 02 處的行:

df.iloc[[0,2]]



   A  B
a  1  4
c  3  6

由於我們在 [] 中有一個列表,因此這裏的返回類型是 DataFrame

使用切片語法訪問行

作為參考,我們再次在此處顯示df

df



   A  B
a  1  4
b  2  5
c  3  6

切片的工作方式與 Python 標準列表的工作方式類似。

要訪問從位置 0(含)到位置 2(不包括)的行:

df.iloc[0:2]



   A  B
a  1  4
b  2  5

如果您不指定起點(例如 [:2] )或終點(例如 [1:] ),則 iloc 將返回從開始或到結束的所有行。例如,要從索引 1 獲取所有行:

df.iloc[1:]



   A  B
b  2  5
c  3  6

使用布爾掩碼訪問行

我們也可以提供一個布爾掩碼(即類似數組的布爾結構)來獲取行。

為了供您參考,我們再次在此處顯示df

df



   A  B
a  1  4
b  2  5
c  3  6

例如,考慮以下掩碼:

df.iloc[[False, True, False]]



   A  B
b  2  5

通過這種方法,將返回與 True 對應的所有行。由於位置02 處的行對應於掩碼中的False,因此排除這些行。

請注意,布爾掩碼的長度必須與 DataFrame 中的行數相同。

使用函數訪問行

我們還可以將函數傳遞給 iloc 來指定要獲取的行。

為了供您參考,我們再次在此處顯示df

df



   A  B
a  1  4
b  2  5
c  3  6

要獲取索引大於 "b" 的行:

df.iloc[lambda x: x.index > "b"]



   A  B
c  3  6

對於那些不熟悉 Python lambda 的人來說,該函數可以解釋如下:

def foo(x):                  # The naming here is irrelevant
   return x.index > "b"

在此,請注意以下事項:

  • x 表示源 DataFrame,即 df

  • 該函數返回一個布爾數組,其中將返回與 True 對應的行。

訪問單個值

我們還可以使用 iloc 訪問 DataFrame 中的單個值。

為了供您參考,我們再次在此處顯示df

df



   A  B
a  1  4
b  2  5
c  3  6

要訪問位置 [1,1] 處的值:

df.iloc[1,1]



5
警告

雖然 iloc 也可用於訪問 DataFrame 中的單個值,但在這種情況下我們通常使用 DataFrame.iat 屬性。

使用行和列訪問值

考慮以下 DataFrame :

df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]}, index=["a","b","c"])
df



   A  B  C
a  1  4  7
b  2  5  8
c  3  6  9
使用數組

要訪問位於行位置 02 以及列位置 01 的子集:

df.iloc[[0,2], [0,1]]



   A  B
a  1  4
c  3  6
使用切片

您也可以在這裏使用切片語法:

df.iloc[1:, :2] 



   A  B
b  2  5
c  3  6

在這裏,我們正在獲取包括位置 1 在內的所有行,以及直到位置 2 處的列(不包括)的所有列。

使用布爾掩碼

布爾掩碼在這裏也起作用:

df.iloc[1:, [True, False, True]]



   A  C
b  2  8
c  3  9

在這裏,我們正在獲取包括位置 1 在內的所有行,以及與布爾掩碼中的 True 對應的列。在本例中,我們包括位置 02 處的列。

複製與查看

根據上下文,iloc 可以返回 viewcopy 。不幸的是,返回的規則很複雜,因此最佳實踐是使用 _is_view 屬性親自檢查這一點。

有一條規則很容易記住——iloc返回看法提取單列時的數據:

df = pd.DataFrame({"A":[2,3], "B":[4,5]})
col_B = df.iloc[:,1]
col_B._is_view



True

由於 col_B 是一個視圖,因此修改 col_B 將會改變原始的 df

使用 iloc 更新值

考慮以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6
更新單個值

要更新行 1 、列 1 處的值:

df.iloc[1,1] = 10
df



   A  B
a  3  5
b  4  10
更新多個值

要更新多個值,隻需使用上述任何訪問模式,然後使用 = 分配新值。例如,要更新第二列:

df.iloc[:,1] = [9,10]
df



   A  B
a  3  9
b  4  10

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | iloc property。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。