Pandas索引器 loc 和 iloc 比較及代碼示例
Pandas 索引器 loc 和 iloc 比較及代碼示例

以下是針對 Pandas 中 loc 和 iloc 的深度對比分析及代碼示例,結(jié)合核心差異、使用場景和底層機(jī)制展開說明:
一、核心差異解析
| 特性 | loc (標(biāo)簽索引) | iloc (位置索引) |
|---|---|---|
| 索引類型 | 行/列標(biāo)簽(字符串、日期等) | 行/列整數(shù)位置(從0開始) |
| 切片行為 | 包含結(jié)束標(biāo)簽(閉區(qū)間) | 不包含結(jié)束位置(左閉右開) |
| 布爾索引 | 直接支持條件表達(dá)式(更直觀) | 需先生成布爾數(shù)組再操作 |
| 索引靈活性 | 支持非整數(shù)標(biāo)簽(如字符串索引) | 僅支持整數(shù)位置 |
二、關(guān)鍵場景代碼示例
1. 基礎(chǔ)索引對比
import pandas as pd
# 創(chuàng)建帶自定義索引的DataFrame
data = {"Age": [25, 32, 28, 40], "City": ["北京", "上海", "廣州", "深圳"]}
df = pd.DataFrame(data, index=["Alice", "Bob", "Charlie", "David"])
# loc按標(biāo)簽選擇 → 獲取Bob行所有列
print(df.loc["Bob"]) # 輸出: Age 32, City 上海
# iloc按位置選擇 → 獲取第1行所有列(索引0為Alice)
print(df.iloc[1]) # 輸出: 同上(Bob行)
Age 32
City 上海
Name: Bob, dtype: object
Age 32
City 上海
Name: Bob, dtype: object
2. 切片行為差異
# loc切片包含結(jié)束標(biāo)簽 → 選擇Alice到Charlie行 print(df.loc["Alice":"Charlie"]) # 輸出3行數(shù)據(jù) # iloc切片不包含結(jié)束位置 → 選擇0至1行(不含索引2) print(df.iloc[0:2]) # 僅輸出Alice和Bob行
Age City
Alice 25 北京
Bob 32 上海
Charlie 28 廣州
Age City
Alice 25 北京
Bob 32 上海
3. 布爾索引使用
# loc直接條件篩選 → 年齡>30的行 print(df.loc[df["Age"] > 30]) # 輸出Bob和David行 # iloc需分兩步 → 先生成掩碼再選擇 mask = df["Age"] > 30 print(df.iloc[mask.values]) # 需用.values轉(zhuǎn)為數(shù)組
Age City
Bob 32 上海
David 40 深圳
Age City
Bob 32 上海
David 40 深圳
4. 混合行列選擇
# loc選擇多列 → 所有行 + "City"列 print(df.loc[:, "City"]) # 輸出城市列所有數(shù)據(jù) # iloc選擇連續(xù)列 → 所有行 + 第1列(列索引從0開始) print(df.iloc[:, 1]) # 同上(City列位置為1)
Alice 北京
Bob 上海
Charlie 廣州
David 深圳
Name: City, dtype: object
Alice 北京
Bob 上海
Charlie 廣州
David 深圳
Name: City, dtype: object
三、高級技巧與性能
1. 函數(shù)式索引
# loc + lambda → 篩選Age為偶數(shù)的行 print(df.loc[lambda x: x["Age"] % 2 == 0]) # 輸出Bob(32), David(40) # iloc + lambda → 篩選索引位置為奇數(shù)的行 print(df.iloc[lambda x: [i for i in range(len(x)) if i % 2 == 1]]) # 輸出Bob行
Age City
Bob 32 上海
Charlie 28 廣州
David 40 深圳
Age City
Bob 32 上海
David 40 深圳
2. 性能優(yōu)化建議
- 大型數(shù)據(jù)集:優(yōu)先用
iloc(整數(shù)位置計(jì)算更快) - 復(fù)雜索引:用
loc避免位置計(jì)算錯(cuò)誤(如時(shí)間序列索引) - 混合場景:若需標(biāo)簽+位置混合索引,先重置索引再用
iloc
df_reset = df.reset_index() df_reset.iloc[1:3, 0:2] # 選擇第1-2行,第0-1列
| index | Age | |
|---|---|---|
| 1 | Bob | 32 |
| 2 | Charlie | 28 |
四、特殊場景處理
1. 整數(shù)索引陷阱
當(dāng)行索引為整數(shù)時(shí),loc 會優(yōu)先識別為標(biāo)簽而非位置:
df_int_index = pd.DataFrame({"Value": [10, 20]}, index=[1, 2])
# loc嘗試按標(biāo)簽訪問 → 報(bào)錯(cuò)(無標(biāo)簽0)
# df_int_index.loc[0] # KeyError
# iloc按位置訪問 → 正常
print(df_int_index.iloc[0]) # 輸出索引1的行(Value:10)
Value 10
Name: 1, dtype: int64
2. 負(fù)索引支持
僅 iloc 支持負(fù)數(shù)索引(從末尾計(jì)數(shù)):
print(df.iloc[-1]) # 輸出最后一行(David)
Age 40
City 深圳
Name: David, dtype: object
五、總結(jié):選擇策略
| 場景 | 推薦方法 | 原因 |
|---|---|---|
| 已知行/列標(biāo)簽(如列名為"Age") | loc | 直接標(biāo)簽訪問,語義清晰 |
| 按行號/列號操作(如前三行) | iloc | 位置計(jì)算高效 |
| 時(shí)間序列數(shù)據(jù)(日期索引) | loc | 避免位置漂移(如df.loc["2023":"2025"]) |
| 大數(shù)據(jù)集遍歷 | iloc | 整數(shù)位置操作速度更快 |
最佳實(shí)踐:優(yōu)先用 loc 保證可讀性,性能敏感時(shí)切 iloc。始終通過 print(df.head()) 確認(rèn)數(shù)據(jù)結(jié)構(gòu),避免索引混淆。
到此這篇關(guān)于Pandas索引器 loc 和 iloc 比較及代碼示例的文章就介紹到這了,更多相關(guān)Pandas索引器 loc 和 iloc內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python Pandas數(shù)據(jù)分析之iloc和loc的用法詳解
- 詳談Pandas中iloc和loc以及ix的區(qū)別
- 聊聊Python pandas 中l(wèi)oc函數(shù)的使用,及跟iloc的區(qū)別說明
- python選取特定列 pandas iloc,loc,icol的使用詳解(列切片及行切片)
- 一文秒懂pandas中iloc()函數(shù)
- 利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法總結(jié)
- Pandas中的loc與iloc區(qū)別與用法小結(jié)
- 對pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解
- Python?Pandas中l(wèi)oc和iloc函數(shù)的基本用法示例
- python中pandas庫的iloc函數(shù)用法解析
相關(guān)文章
Python使用lambda表達(dá)式對字典排序操作示例
這篇文章主要介紹了Python使用lambda表達(dá)式對字典排序操作,結(jié)合實(shí)例形式分析了lambda表達(dá)式實(shí)現(xiàn)字典按鍵排序、按值排序、多條件排序相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn)
這篇文章主要介紹了使用python批量轉(zhuǎn)換文件編碼為UTF-8的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化
在圖像處理中,直方圖是非常重要,也是非常有用的一個(gè)處理要素。這篇文章主要介紹了python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
Keras:Unet網(wǎng)絡(luò)實(shí)現(xiàn)多類語義分割方式
本文主要利用U-Net網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)了多類的語義分割,并展示了部分測試效果,希望對你有用!2020-06-06
Python檢查 云備份進(jìn)程是否正常運(yùn)行代碼實(shí)例
這篇文章主要介紹了Python檢查 云備份進(jìn)程是否正常運(yùn)行代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
TensorFlow進(jìn)階學(xué)習(xí)定制模型和訓(xùn)練算法
本文將為你提供關(guān)于 TensorFlow 的中級知識,你將學(xué)習(xí)如何通過子類化構(gòu)建自定義的神經(jīng)網(wǎng)絡(luò)層,以及如何自定義訓(xùn)練算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Python數(shù)據(jù)可視化探索實(shí)例分享
這篇文章主要介紹了Python數(shù)據(jù)可視化探索實(shí)例分享,數(shù)據(jù)可視化是指用圖形或表格的方式來呈現(xiàn)數(shù)據(jù),關(guān)于更多相關(guān)介紹需要的小伙伴可以參考下面文章的具體內(nèi)容2022-05-05
python調(diào)用sikulixide庫實(shí)現(xiàn)自動化腳本方法實(shí)例
SikuliX IDE是一個(gè)基于圖像識別的自動化測試工具,主要用于UI測試,它本身并不直接支持文本文件讀取操作,因?yàn)樗饕糜谔幚砥聊簧系膱D片和截圖,這篇文章主要介紹了python調(diào)用sikulixide庫實(shí)現(xiàn)自動化腳本的相關(guān)資料,需要的朋友可以參考下2025-11-11

