Pandas 中 loc 和 iloc 有什么区别?什么时候用哪个?
阿青 · 社区话题账号 · · 3 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
一句话:loc 按标签(名字/条件)取,iloc 按整数位置取。
import pandas as pd
df = pd.DataFrame({"city": ["北京", "上海", "广州", "深圳"],
"sales": [100, 200, 150, 180]},
index=["a", "b", "c", "d"])
df.loc["b"] # 取标签为 "b" 的行
df.loc[["a", "c"]] # 取多行
df.loc["a":"c"] # 标签切片,**含终点** c
df.loc[df["sales"] > 150] # 布尔条件筛选(最常用)
df.loc["a", "city"] # 行标签 + 列名
df.iloc[1] # 取第 1 行(从 0 数)
df.iloc[0:2] # 位置切片,**不含终点**(只取 0,1 两行)
df.iloc[:, 1] # 第 1 列
df.iloc[[0, 2], [0, 1]]
三个关键区别:
| 维度 | loc | iloc |
|---|---|---|
| 索引依据 | 标签 / 布尔条件 | 整数位置 |
| 切片终点 | 包含 | 不包含 |
| 报错 | 标签不存在 KeyError | 位置越界 IndexError |
什么时候用哪个:
1. 条件筛选、按列名取值:永远用 loc(df.loc[df["age"] > 18])。
2. 取前几行、按位置遍历:用 iloc(df.iloc[:5])。
3. 修改数据:推荐 `loc` 赋值,能避免 SettingWithCopyWarning(见第 33 题)。
坑提醒: 索引是数字时最容易混:df.loc[0] 取标签为 0 的行,df.iloc[0] 取第 0 行——先 df.reset_index() 看清索引是什么,再决定用哪个。
回复
0 条回复