Pandas中iloc[]和loc[]的實現(xiàn)示例
iloc[]和loc[]是Pandas中用于數(shù)據(jù)索引/切片的核心方法,核心區(qū)別在于索引依據(jù)不同:iloc基于“整數(shù)位置”,loc基于“標簽(行索引名/列名)”。以下分點對比并結合實例說明:
一、區(qū)別對比
| 維度 | iloc[](integer location) | loc[](label location) |
|---|---|---|
| 索引依據(jù) | 行/列的整數(shù)位置(從0開始計數(shù)) | 行的索引名、列的列名(標簽) |
| 切片規(guī)則 | 左閉右開(如0:2僅包含位置0、1) | 包含終點(如'a':'c'包含標簽a、b、c) |
| 支持的索引類型 | 整數(shù)、整數(shù)列表、整數(shù)切片、布爾數(shù)組 | 標簽、標簽列表、標簽切片、布爾數(shù)組 |
| 適用場景 | 按數(shù)據(jù)的“物理順序”取數(shù)(不管行/列標簽) | 按數(shù)據(jù)的“邏輯標簽”取數(shù)(依賴行/列的命名) |
注:Pandas 的 “列標簽” 和 “行標簽” 分別對應 DataFrame.columns 和 DataFrame.index。而機器學習中的 “樣本標簽”是指樣本的目標值(label / 目標變量),二者不同。
注:iloc和loc都支持可調(diào)用對象(callable)(比如df.loc[lambda df: df[‘列名’]>0])
二、實例演示(構造帶自定義標簽的DataFrame)
先創(chuàng)建一個行索引為自定義標簽的DataFrame(避免默認整數(shù)索引,更易體現(xiàn)區(qū)別):
import pandas as pd
data = pd.DataFrame(
data={'數(shù)學': [90, 85, 78], '英語': [88, 92, 75]},
index=['張三', '李四', '王五'] # 行標簽(非默認整數(shù))
)
print("原始DataFrame:")
print(data)
輸出:
數(shù)學 英語
張三 90 88
李四 85 92
王五 78 75
1. iloc取單行/loc取單列
- iloc(按整數(shù)位置):行位置0對應“張三”,列位置0對應“數(shù)學”
data.iloc[0] # 取第1行(位置0) # 輸出: # 數(shù)學 90 # 英語 88 # Name: 張三, dtype: int64
loc(按標簽):直接用行標簽“張三”、列名“數(shù)學”data.loc['張三'] # 取標簽為“張三”的行 # 輸出同iloc[0]
2. iloc取多行/loc取多列(切片)
iloc(左閉右開):0:2僅包含位置0、1(對應“張三”“李四”)data.iloc[0:2] # 取位置0到2(不含2)的行 # 輸出: # 數(shù)學 英語 # 張三 90 88 # 李四 85 92
loc(包含終點):'張三':'王五'包含所有標簽在“張三”到“王五”之間的行data.loc['張三':'王五'] # 取標簽從“張三”到“王五”的行(含王五) # 輸出: # 數(shù)學 英語 # 張三 90 88 # 李四 85 92 # 王五 78 75
3. 取特定行+列(二維索引)
iloc(行位置+列位置):行位置1(李四)、列位置1(英語)data.iloc[1, 1] # 取第2行(位置1)、第2列(位置1)的值 # 輸出:92
loc(行標簽+列名):行標簽“李四”、列名“英語”data.loc['李四', '英語'] # 取“李四”行、“英語”列的值 # 輸出:92
4. 布爾索引(按條件取數(shù))
兩者都支持布爾數(shù)組,但loc更常用(直接關聯(lián)標簽):
# 條件:數(shù)學分數(shù)>80 mask = data['數(shù)學'] > 80 # iloc:先獲取滿足條件的行位置,再取數(shù) data.iloc[mask.values] # mask.values是布爾數(shù)組,對應行位置 # 輸出: # 數(shù)學 英語 # 張三 90 88 # 李四 85 92 # loc:直接用布爾數(shù)組取數(shù)(更直觀) data.loc[mask] # 輸出同iloc
三、注意點
- 若DataFrame用默認整數(shù)行索引(如0、1、2),
iloc[0]和loc[0]結果可能相同,但邏輯本質(zhì)不同:iloc[0]是“取位置0”,loc[0]是“取標簽為0的行”; iloc的切片不包含終點(如0:3取0、1、2),loc的切片包含終點(如0:3取標簽0、1、2、3),這是最易踩坑的差異;- 實際場景中:
- 若需要按“數(shù)據(jù)的物理順序”取數(shù)(如“前5行”),用
iloc; - 若需要按“行/列的命名”取數(shù)(如“取‘張三’的成績”),用
loc。
- 若需要按“數(shù)據(jù)的物理順序”取數(shù)(如“前5行”),用
測試:看你是否能讀懂這句程序:
numerical_df.loc[numerical_df['A'] < numerical_df['B'], 'A'] = 100
到此這篇關于Pandas中iloc[]和loc[]的實現(xiàn)示例的文章就介紹到這了,更多相關Pandas iloc[]和loc[]內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch中tensorboard安裝及安裝過程中出現(xiàn)的常見錯誤問題
這篇文章主要介紹了pytorch中tensorboard安裝及安裝過程中出現(xiàn)的常見錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Python使用pyttsx3實現(xiàn)文本朗讀功能的詳細教程及避坑指南
今天給大家?guī)硪粋€非常實用的Python庫——pyttsx3,它可以把文字轉(zhuǎn)換成語音,讓你的程序開口說話,這篇文章會從零開始,一步步教你搭建環(huán)境、編寫代碼,并分享一些踩坑經(jīng)驗,需要的朋友可以參考下2026-03-03

