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

