DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

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. 条件筛选、按列名取值:永远用 locdf.loc[df["age"] > 18])。

2. 取前几行、按位置遍历:用 ilocdf.iloc[:5])。

3. 修改数据推荐 `loc` 赋值,能避免 SettingWithCopyWarning(见第 33 题)。

坑提醒: 索引是数字时最容易混:df.loc[0] 取标签为 0 的行,df.iloc[0] 取第 0 行——先 df.reset_index() 看清索引是什么,再决定用哪个。

下载推广海报

圈内讨论推广海报

《Pandas 中 loc 和 iloc 有什么区别?什么时候用哪个?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。