python之loc與iloc的用法及說明
loc 是 Pandas 中用于 基于標(biāo)簽(label-based)的索引選擇方法,專門用于按行/列標(biāo)簽精準(zhǔn)定位和操作 DataFrame 或 Series 中的數(shù)據(jù)。
以下是詳細(xì)解析:
一、核心功能
1. 基本語法
df.loc[行標(biāo)簽選擇, 列標(biāo)簽選擇]
- 行標(biāo)簽選擇:可以是單個標(biāo)簽、標(biāo)簽列表、切片(如
"a":"d")或布爾條件 - 列標(biāo)簽選擇:同上,支持標(biāo)簽篩選
2. 特性
- 標(biāo)簽優(yōu)先:索引基于行/列的名稱(字符串或數(shù)字標(biāo)簽),而非位置
- 閉區(qū)間:切片包含起始和結(jié)束標(biāo)簽(與 Python 常規(guī)切片不同)
- 支持高級操作:布爾索引、條件過濾、函數(shù)調(diào)用等
二、典型使用場景
1. 精確提取單值
# 獲取行標(biāo)簽為2,列標(biāo)簽為'Age'的值 df.loc[2, 'Age']
2. 選擇行范圍 + 多列
# 選取行標(biāo)簽從'user1'到'user3',列標(biāo)簽'Name'和'Score' df.loc['user1':'user3', ['Name', 'Score']]
3. 條件篩選
# 選擇所有年齡大于30的行,并顯示'City'列 df.loc[df['Age'] > 30, 'City']
4. 修改數(shù)據(jù)
# 將行標(biāo)簽為5的'Status'列值改為'active' df.loc[5, 'Status'] = 'active'
三、與 iloc 的對比
| 特性 | loc | iloc |
|---|---|---|
| 索引類型 | 標(biāo)簽(字符串或數(shù)字) | 純整數(shù)位置(0-based) |
| 切片區(qū)間 | 閉區(qū)間(包含兩端) | 左閉右開(Python 標(biāo)準(zhǔn)切片) |
| 允許輸入類型 | 標(biāo)簽、布爾數(shù)組、條件表達(dá)式 | 整數(shù)、整數(shù)列表、整數(shù)切片 |
| 示例 | df.loc['a':'c', 'Name'] | df.iloc[0:3, 1] |
四、避坑指南
1. 避免鏈?zhǔn)劫x值
# ? 可能引發(fā) SettingWithCopyWarning df['Age'][df['Name'] == 'Alice'] = 25 # ? 規(guī)范寫法 df.loc[df['Name'] == 'Alice', 'Age'] = 25
2. 處理混合索引
當(dāng) DataFrame 的索引是整數(shù)時,loc 和 iloc 可能產(chǎn)生歧義:
df = pd.DataFrame({'A': [1,2,3]}, index=[10, 20, 30])
# 按標(biāo)簽選擇(查找標(biāo)簽為1的行)
df.loc[10] # ? 返回第10標(biāo)簽行
# 按位置選擇(查找第0行)
df.iloc[0] # ? 返回第10標(biāo)簽行(位置0)
五、高級用法示例
1. 使用函數(shù)篩選
# 選擇索引以'2023'開頭的行
df.loc[lambda x: x.index.str.startswith('2023')]
2. 多條件復(fù)合篩選
# 選擇年齡在20-30歲且城市為北京的行 df.loc[(df['Age'] >= 20) & (df['City'] == '北京')]
3. 跨列計算賦值
# 當(dāng)Score列大于90時,Status設(shè)為'A+' df.loc[df['Score'] > 90, 'Status'] = 'A+'
六、總結(jié)
- 核心作用:基于標(biāo)簽精準(zhǔn)操作數(shù)據(jù)(查、改、刪)
- 優(yōu)勢:代碼可讀性高,支持復(fù)雜條件篩選
- 適用場景:數(shù)據(jù)清洗、條件篩選、動態(tài)計算等
# 典型工作流示例 cleaned_data = df.loc[df['Quality'] > 0.8, ['ID', 'Value']] # 篩選高質(zhì)量數(shù)據(jù) cleaned_data.loc[:, 'Value'] *= 100 # 批量修改選中列的值
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能
這篇文章主要介紹了Python實(shí)現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能,可實(shí)現(xiàn)Python針對mysql的查詢與宕機(jī)信息通過郵件發(fā)送的相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
Python os模塊中的isfile()和isdir()函數(shù)均返回false問題解決方法
這篇文章主要介紹了Python os模塊中的isfile()和isdir()函數(shù)均返回false問題解決方法,返回false的原因是路徑使用了相對路徑,使用絕對路徑就可以解決這個問題,需要的朋友可以參考下2015-02-02
Python turtle繪圖教程之七段數(shù)碼管顯示數(shù)字和字母
這篇文章主要給大家介紹了關(guān)于Python turtle繪圖教程之七段數(shù)碼管顯示數(shù)字和字母的相關(guān)資料,Python是一種流行的編程語言,可用于編寫各種類型的程序,在數(shù)碼管顯示器上數(shù)字8由7條不同的線條組成,需要的朋友可以參考下2023-10-10
詳解PyCharm使用pyQT5進(jìn)行GUI開發(fā)的基本流程
本文主要介紹了PyCharm使用pyQT5進(jìn)行GUI開發(fā)的基本流程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
Python socket C/S結(jié)構(gòu)的聊天室應(yīng)用實(shí)現(xiàn)
這篇文章主要介紹了Python socket C/S結(jié)構(gòu)的聊天室應(yīng)用實(shí)現(xiàn),需要的朋友可以參考下2014-11-11
如何取消pyecharts繪制地圖時默認(rèn)顯示小圓點(diǎn)標(biāo)識
這篇文章主要介紹了如何取消pyecharts繪制地圖時默認(rèn)顯示小圓點(diǎn)標(biāo)識,文章內(nèi)容介紹詳細(xì)具有一定的參考價值?需要的小伙伴可以參考一下2022-04-04

