行者孙Python

择洗篇-Day13|定位取料:条件筛选 loc /iloc 选取数据

📖 知识点

1. loc:按 "标签 / 名字" 取数据

loc[行, 列],行和列都用名字 / 标签:

# 取指定行的某列(按行名0,列名"价格")
df.loc[0, "价格"]
# 取某几行
df.loc[[0, 2]]          # 取索引0、2两行
# 取某几列
df.loc[:, ["菜名", "价格"]]  # 取菜名、价格两列(:表示所有行)

2. iloc:按 "位置编号" 取数据

iloc[行, 列],用整数位置(第 0 行、第 1 列…):

# 取第0行第1列(位置)
df.iloc[0, 1]
# 取前两行
df.iloc[:2]
# 取第1、2列
df.iloc[:, 1:3]   # 第1列到第2列(不含3)

3. 条件筛选:取 "符合条件" 的行

这是最常用的 —— 按条件挑行:

# 取"价格 > 3"的所有行
df[df["价格"] > 3]
# 组合条件 &(且) |(或)
df[(df["价格"] > 3) & (df["数量"] > 15)]

完整示例

import pandas as pd

data = {
    "菜名": ["白菜", "番茄", "土豆", "黄瓜"],
    "价格": [3, 5, 2, 4],
    "数量": [10, 20, 30, 15],
}
df = pd.DataFrame(data)

print(df.loc[0, "价格"])      # 按名字取:第0行价格=3
print(df.iloc[0, 1])         # 按位置取:第0行第1列=3
print(df[df["价格"] > 3])     # 条件筛选:价格>3的行

💡 三招对比

方法用什么选例子
loc标签 / 名字df.loc[0, "价格"]
iloc位置编号df.iloc[0, 1]
条件筛选布尔条件df[df["价格"]>3]

⚠️ 易错提醒

  1. loc 用名字(列名、索引名),iloc 用数字位置,别混用
  2. 条件筛选的 df["价格"]>3 外面要再加一层 df[...]
  3. 多条件用 &(且)、|(或),每个条件要加括号

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas,创建一份数据(菜名、价格、数量)
  2. 用 loc 按名字取第 0 行的 "价格"
  3. 用 iloc 按位置取第 0 行第 1 列
  4. 用条件筛选取 "价格大于 3" 的所有行
  5. 用组合条件取 "价格 > 3 且 数量 > 15" 的行

参考代码

import pandas as pd

data = {
    "菜名": ["白菜", "番茄", "土豆", "黄瓜"],
    "价格": [3, 5, 2, 4],
    "数量": [10, 20, 30, 15],
}
df = pd.DataFrame(data)
print("===== 原表 =====")
print(df)

# loc:按名字取
print("\n===== loc 取第0行价格 =====")
print(df.loc[0, "价格"])

# iloc:按位置取
print("\n===== iloc 取第0行第1列 =====")
print(df.iloc[0, 1])

# 条件筛选
print("\n===== 价格>3 的行 =====")
print(df[df["价格"] > 3])

print("\n===== 价格>3 且 数量>15 的行 =====")
print(df[(df["价格"] > 3) & (df["数量"] > 15)])

运行输出:

===== 原表 =====
   菜名  价格  数量
0  白菜    3   10
1  番茄    5   20
2  土豆    2   30
3  黄瓜    4   15

===== loc 取第0行价格 =====
3

===== iloc 取第0行第1列 =====
3

===== 价格>3 的行 =====
   菜名  价格  数量
1  番茄    5   20
3  黄瓜    4   15

===== 价格>3 且 数量>15 的行 =====
   菜名  价格  数量
1  番茄    5   20

💡 观察:loc 和 iloc 都能取到 3(第 0 行的价格);条件筛选精准挑出 "价格 > 3" 和 "且数量 > 15" 的行。

🧠 思考题

  1. loc[0, "价格"] 和 iloc[0, 1] 分别靠什么定位?它们取到的值一样吗?
  2. 组合条件筛选时,& 和 | 各代表什么?每个条件为什么必须加括号?
‹ 返回目录
🏠首页 Python 📦资源 👤关于我