Pandas 的 DataFrame.iloc
用於使用整數索引訪問或更新 DataFrame 的特定行/列。
注意
盡管它也可以用於訪問 DataFrame 中的單個值,但在這種情況下我們通常使用 DataFrame.iat
屬性。
返回值
例子
考慮以下 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
。
訪問行的子集
要訪問位置 0
和 2
處的行:
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
對應的所有行。由於位置0
和2
處的行對應於掩碼中的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
使用數組
要訪問位於行位置 0
和 2
以及列位置 0
和 1
的子集:
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
對應的列。在本例中,我們包括位置 0
和 2
處的列。
複製與查看
根據上下文,iloc
可以返回 view
或 copy
。不幸的是,返回的規則很複雜,因此最佳實踐是使用 _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
相關用法
- Python Pandas DataFrame items方法用法及代碼示例
- Python Pandas DataFrame insert方法用法及代碼示例
- Python Pandas DataFrame isin方法用法及代碼示例
- Python PySpark DataFrame intersect方法用法及代碼示例
- Python Pandas DataFrame idxmin方法用法及代碼示例
- Python Pandas DataFrame idxmax方法用法及代碼示例
- Python Pandas DataFrame iteritems方法用法及代碼示例
- Python Pandas DataFrame infer_objects方法用法及代碼示例
- Python Pandas DataFrame index屬性用法及代碼示例
- Python Pandas DataFrame isna方法用法及代碼示例
- Python Pandas DataFrame iat屬性用法及代碼示例
- Python Pandas DataFrame info方法用法及代碼示例
- Python Pandas DataFrame itertuples方法用法及代碼示例
- Python Pandas DataFrame iterrows方法用法及代碼示例
- Python PySpark DataFrame intersectAll方法用法及代碼示例
- Python Pandas DataFrame interpolate方法用法及代碼示例
- Python Pandas DataFrame isnull方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
- Python Pandas DataFrame pop方法用法及代碼示例
- Python Pandas DataFrame nsmallest方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
- Python Pandas DataFrame max方法用法及代碼示例
- Python Pandas DataFrame swaplevel方法用法及代碼示例
- Python Pandas DataFrame agg方法用法及代碼示例
- Python Pandas DataFrame copy方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | iloc property。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。